자바/백준
[백준 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번 돌리던지
메모리 초과가 항상 뜨더라
친구가 이거 배열을 쓰면 안 될 거 같아 라고 해서
열심히 노트북에 시뮬레이션을 돌려봤다
그러다 보니 어떤 자연수의 제곱값인 수들만 최종적으로 열려있다는 걸 깨달았다
그 규칙 적용시켜서 제곱값인 수들의 개수를 세고 그 개수를 출력하게 해주었더니 맞더라