자바/백준

[백준 5671] 호텔 방 번호

슈슈버거 2022. 8. 24. 23:48

문제

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

 

5671번: 호텔 방 번호

선영이는 집 호수에 반복되는 숫자가 있는 경우에는 그 집에 사는 사람에게 불운이 찾아온다고 믿는다. 따라서, 선영이는 838호나 1004호와 같이 한 숫자가 두 번 이상 들어있는 집에는 절대 살지

www.acmicpc.net


내가 작성한 코드

import java.io.*;

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

        String input = null;

        while((input = br.readLine()) != null){
            String[] line = input.split(" ");
            int start = Integer.parseInt(line[0]);
            int end = Integer.parseInt(line[1]);

            int count = 0;

            for(int i = start; i<=end; i++){
                String number = Integer.toString(i);
                int[] oton = new int[10];

                boolean state = true;

                for(int j = 0; j<number.length(); j++){
                    oton[number.charAt(j)-'0']++;

                    if(oton[number.charAt(j)-'0'] != 1){
                        state = false;
                        break;
                    }
                }

                if(state == true){
                    count++;
                }
            }

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

        bw.close();
    }
}

처음에는 문자열을 공백으로 만들어서 거기에 contain이 되어 있는가 안 되어 있는가로 풀었는데

그랬더니 메모리 초과가 뜨더라

 

그래서 방법을 바꿔서 int형 배열로 0부터 9까지의 자리를 만들어준 다음에

그 숫자에 해당하는 자리에 1을 더해주고

 

그 숫자의 위치에 존재하는 값이 1이 아닐 경우는 중복되었다는 뜻이므로

break하도록 해주었다

'자바 > 백준' 카테고리의 다른 글

[백준 25304] 영수증  (0) 2022.09.05
[백준 13909] 창문 닫기  (0) 2022.08.26
[백준 4796] 캠핑  (0) 2022.08.23
[백준 2954] 창영이의 일기장  (0) 2022.08.23
[백준 2810] 컵홀더  (0) 2022.08.23