728x90

 0. [c++] 백준  - 


https://www.acmicpc.net/problem/1057


 1. 풀이


코드에서는 3가지를 확인하며 지속적으로 2로 나누어주었다.

1. 김지민이 소수일 때,

kim + 1 == LIM인 경우, 이번에 경기를 하게 된다.

즉, 이번까지의 count를 출력한다.


2. 김지민이 짝수일 때,

kim - 1 == LIM인 경우, 이번에 경기를 하게 된다.

즉, 이번까지의 count를 출력한다.


3. 김지민과 임한수가 같은 경우

바로 반복을 종료하고 count를 출력한다.


이러한 조건이 있는데, 이 3가지 중에서 골라서 코드를 작성하면 된다.


 2. 소스코드

1) 1,2,3의 조건을 모두 사용한 경우.

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>
 
int N, KIM, LIM;
 
void calc() {
    int count(0);
    while (KIM != LIM) {
        count++;
        if (KIM % 2) {
            if (KIM + 1 == LIM)
                break;
            KIM = KIM / 2 + 1;
        }
        else {
            if (KIM - 1 == LIM)
                break;
            KIM /= 2;
        }
        if (LIM % 2)
            LIM = LIM / 2 + 1;
        else
            LIM /= 2;
    }
 
    std::cout << count;
}
 
int main() {
    std::cin >> N >> KIM >> LIM;
    calc();
}
cs


2. 3의 조건만 사용한 경우

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
#include<iostream>
 
int N, KIM, LIM;
 
void calc() {
    int count(0);
    while (KIM != LIM) {
        count++;
        if (KIM % 2) {
            KIM = KIM / 2 + 1;
        }
        else {
            KIM /= 2;
        }
        if (LIM % 2)
            LIM = LIM / 2 + 1;
        else
            LIM /= 2;
    }
 
    std::cout << count;
}
 
int main() {
    std::cin >> N >> KIM >> LIM;
    calc();
}
cs



 3. 참고




질문이나 지적 있으시면 댓글로 남겨주세요~

도움 되셨으면 하트 꾹!


+ Recent posts