백준 13909 창문 닫기 [JAVA]

Ga0·2023년 5월 29일
0

baekjoon

목록 보기
59/123

문제 해석

  • 문제를 처음 읽었을 때 이게 무슨 말인지 헷갈렸는데 이해한 토대로 정리하면 다음과 같다.
  • 일단, 정수인 N을 입력받는데 이 N사람 수이기도 하고, 창문의 개수이기도 하다.
  • 이런 식으로 진행했을 때, N명 만큼의 사람이 모두 창문에 대한 처리를 하였을 때, 마지막까지 열려있는 창문의 수를 구하면 된다.

  • 단, 닫혀있으면 열고, 열려있으면 닫는다!!

  • 이 과정을 지켜보니까 약수의 개수가 홀수인 경우 열고-닫고-열기 이니 마지막에는 열려있다.

  • 다시 말해, N까지의 숫자중에 약수의 개수가 홀수인 숫자를 찾으면 되는 문제이다.

정리

  • n번째 창문이 열려 있으려면, 그 창문을 열고 닫은 횟수가 홀수여야한다.

  • n = 4일 경우,
    첫번째 사람, 두번째 사람, 네번째 사람이 네번째 문을 열고 닫고 연다.

  • n = 9일 경우,
    첫번째 사람, 세번째 사람, 아홉번째 사람이 9번째 문을 열고 닫고 연다.
    즉, 약수의 갯수가 3인 n번째 창문이 열려 있다.

  • 따라서 1, 4, 9, 16, 25 .... 를 기점으로 열린 창문의 갯수가 하나씩 증가하는 것을 알 수 있다.

  • 다시 말해 약수가 홀수인 것은 제곱 수밖에 없다는 것!!

코드

import java.io.*;

public class Main {

    //입력&출력 부분
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

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

        int count = 0; //창문이 열려있는 개수
        for(int i = 1; i * i <= N; i++) { //제곱수만 카운트
            count++;
        }

        bw.write(count + "\n");

        br.close();

        bw.flush();
        bw.close();
    }


}
  • 코드에 대한 설명은 문제 해석부분에서 다루었으니 생략하겠다.

결과

느낀 점

  • 문제에 대한 느낀점은 크게 없고, 드디어 절취선을 넘어갔다는 게🫣

2개의 댓글

comment-user-thumbnail
2024년 1월 26일

규칙성을 찾아내면 압도적으로 메모리를 아낄수있군용

1개의 답글