자바/백준

[백준 13909] 창문 닫기

슈슈버거 2022. 8. 26. 01:18

문제

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

 

13909번: 창문 닫기

서강대학교 컴퓨터공학과 실습실 R912호에는 현재 N개의 창문이 있고 또 N명의 사람이 있다. 1번째 사람은 1의 배수 번째 창문을 열려 있으면 닫고 닫혀 있으면 연다.  2번째 사람은 2의 배수 번째

www.acmicpc.net


내가 작성한 코드

import java.io.*;

public class 백준13909 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int people = Integer.parseInt(br.readLine());

        int count = 0;

        for(int i = 1; i*i<=people; i++){
            count++;
        }

        bw.write(Integer.toString(count));
        bw.close();
    }
}

처음에는 people의 길이만큼 int형 배열을 만들어서 풀었었다

그랬더니 people*people만큼 for문을 돌리거나 그 약수의 개수만큼 people번 돌리던지

메모리 초과가 항상 뜨더라

 

친구가 이거 배열을 쓰면 안 될 거 같아 라고 해서

열심히 노트북에 시뮬레이션을 돌려봤다

 

그러다 보니 어떤 자연수의 제곱값인 수들만 최종적으로 열려있다는 걸 깨달았다

그 규칙 적용시켜서 제곱값인 수들의 개수를 세고 그 개수를 출력하게 해주었더니 맞더라