[백준/JAVA] 13909번 창문 닫기

정은아·2024년 2월 6일

[알고리즘] 수학 모음

목록 보기
28/152
post-thumbnail

내 풀이 1 : 메모리 초과

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        // 창문이 열려있으면 닫고, 닫혀있으면 열기

        //

        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();

        int num = sc.nextInt();
        int [] arr = new int [num+1];
        int count = 0;

        for (int i = 1; i <= num; i++) {
            for (int j = i; j <= num; j+=i) {
                if (arr[j] == 0){
                    arr[j] = 1;
                }else{
                    arr[j] = 0;
                }
            }

        }

        for (int i = 1; i <= num; i++) {
            if (arr[i] == 1){
                count++;
            }
        }

        sb.append(count);
        System.out.println(sb.toString());

    }
}

내 풀이 2 :

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        // 창문이 열려있으면 닫고, 닫혀있으면 열기

        // num = 3 // 1 0 0
        // num = 4 // 1 0 0 1
        // num = 5 // 1 0 0 1 0
        // num = 6 // 1 0 0 1 0 0
        // 이렇듯, n에 루트씌운 수만큼 1이 나오는 것을 확인할수 있다.
        // 그냥 다른 설계 다 필요없고, 입력받은 num에 루트씌워서 int로 출력

        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();

        int num = sc.nextInt();
        int count = 0;

        count = (int)Math.sqrt(num);

        sb.append(count);
        System.out.println(sb.toString());
    }
}

느낀점

이 문제는.. 뭐 for문 안에 for문을 넣고 조건을 쓰고 그런게 아니고
그냥 공식을 찾으면 됐다.
창문이 3개일 땐 100
창문이 4개일 땐 1001
창문이 5개일 땐 10010
창문이 6개일 땐 100100

이렇듯 창문의 갯수에 루트 씌운 숫자만큼 열려있는 걸 확인할 수 있었다.
그냥 그래서 루트씌우고 int로 변환해서 출력하니까
개멋진 숏코딩을 해서 뿌듯했는데 누가 4ms만에 풀었더라
뭐지 이사람은??

아무튼 잘 풀었다 다신 보지말자 약수,소수와 배수야

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글