1476번 문항 날짜 계산문제 풀이법입니다.





제가 문제를 푼 순서입니다.


1. 변수를 하나 선언한다.

2. 그 변수를 계속해서 증가시킨다. 이와 동시에, E,S,M도 증가를 시킨다.

3. E,S,M 각각의 제한 연도를 넘기면 다시 1부터 센다.

4. 입력한 E,S,M와 일치할 때까지 카운팅을 한다.

5. 일치하면 카운팅을 중단하고 그 변수를 출력한다.

 

이렇게 풀어야겠다고 생각을 한 다음, 코딩을 진행했습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<iostream>
 
using namespace std;
 
int main()
{
    int E, S, M;
    int count[3= { 0 };                                        
    int realyear = 0;
 
    cin >> E >> S >> M;
 
    while (1)
    {
        for (int i = 0; i < 3; i++)
        {
            count[i]++;                                                //E,S,M을 각각 1씩 증가시켜준다.
        }
        realyear++;                                                    //우리가 사용하는 연도도 1씩 증가시켜준다.
        if (count[0== 16) count[0= 1;                            //각 E,S,M 의 범위가 넘어가면 1부터 다시 센다.
        if (count[1== 29) count[1= 1;
        if (count[2== 20) count[2= 1;
        if (count[0== E && count[1== S && count[2== M)        //입력한 E,S,M의 값과 일치하는 순간
        {                                
            cout << realyear;                                        //출력하고
            return 0;                                                //프로그램을 마친다.
        }
    }
    return 0;
 
}
cs



정답확인 완료하였습니다.


2309번 문항 일곱 난쟁이 문항입니다.





제가 문제를 푼 순서입니다.


1. 아홉 난쟁이들을 우선 오름차순으로 정렬한다.

2. 두 난쟁이들을 제외하면서, 일곱 난쟁이들의 키의 합을 구한다.

3. 100이 되면 그 두 난쟁이들을 제외하고 일곱 난쟁이들을 출력한다.


라고 생각을 한 다음, 코드로 구현했습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include<iostream>
 
using namespace std;
 
bool add_shortguys(int a, int b, int * _shortguys)    //제외할 두 난쟁이의 index는 a,b입니다.
{
    int sum = 0;
    for (int i = 0; i < 9; i++)    
    {
        if (i == a || i == b) continue;                //두 난쟁이들을 제외하고
        sum += _shortguys[i];                        //합을 구합니다.
    }
    if (sum == 100) { return true; }                //총 합이 100이 되면 true값을 반환하고
    else return false;                                //100이 아니라면 false값을 반환합니다.
}
 
int main()
{
    int shortguys[9= { 0 };
    int temp;
    for (int i = 0; i < 9; i++)
    {
        cin >> shortguys[i];
    }
 
    for (int j = 0; j < 8; j++)                        //우선 아홉난쟁이들을 오름차순으로 정렬합니다.
    {
        for (int i = 0; i < 9-(j+1); i++)
        {
            if (shortguys[i] > shortguys[i + 1])
            {
                temp = shortguys[i];
                shortguys[i] = shortguys[i + 1];
                shortguys[i + 1= temp;
            }
        }
    }
 
    for (int i = 0; i < 8; i++)                        //모든 경우의 수를 순서대로, 두 난쟁이들을 선정합니다.
    {
        for (int j = i + 1; j < 9; j++)
        {
            if (add_shortguys(i, j, shortguys) == true)        //그렇게 선정된 난쟁이들을 만들어준 함수에 매개변수로 넘겨줍니다.
            {                                                //일곱 난쟁이들의 합이 100임을 확인하면, true값을 반환합니다.
                for (int k = 0; k < 9; k++)                    //제외했던 두 난쟁이들을 제외하고 일곱난쟁이들을 출력합니다.
                {
                    if (k == i || k == j) continue;
                    cout<< shortguys[k]<<"\n";
                }
                return 0;                                    //출력을 완료하고 프로그램을 종료시켜야합니다.(유의하세요)
            }
        }
    }
    return 0;
}
cs



정답확인했습니다.

+ Recent posts