알고리즘/구현 & 그리디 & 브루트포스

[JAVA] 백준 15736번: 청기 백기

K.두부 2023. 11. 7. 15:49
반응형

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

 

15736번: 청기 백기

예제 입력 1의 경우 1, 2, 3번 깃발이 존재하고, 3명의 선수가 참가한다. 첫 번째 선수는 1의 배수의 번호를 가진 깃발을 뒤집는다. 초기에 청색이였던 깃발은 첫 번째 선수에 의해 모두 백기로 된

www.acmicpc.net

실버 Ⅳ

 

🔶 풀이

완전 탐색으로 풀면 범위가 너무 넓어서 시간 초과가 발생한다.

규칙을 찾아서 해결해줘야되는 문제.

 

1은 약수가 1개, 한 번 뒤집힘

2는 약수가 2개, 두 번 뒤집힘 = 그대로 청색

4는 약수가 3개, 세 번 뒤집힘

6은 약수가 4개, 네 번 뒤집힘 = 그대로 청색

9는 약수가 3개, 세 번 뒤집힘

 

루트 N이 정수일 때만 백기 상태로 뒤집히는 것을 알 수 있다.

따라서, N보다 작은 제곱수 개수를 찾아서 더 해주면 된다.

 

 

<최종코드>

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
        int N = Integer.parseInt(br.readLine()); // 깃발 수
        int cnt = 1;
		
        for (int i=2; i<=N; i++) {
            if (i * i > N) {
                break;
            }
			
            cnt++;
        }
		
        System.out.println(cnt);
    }
}

반응형