본문 바로가기
백준

[백준] 알고리즘 분류(구현,JAVA)1475번, 방 번호

by 열정적인 이찬형 2022. 12. 21.

문제 링크

 

1475번: 방 번호

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net


주의사항

  • JAVA를 사용하여 프로그램을 사용하였습니다.
  • 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{ 	
	public static void main(String[] args){
    }
}

문제 설명


접근 방법

이 문제에 핵심

 

1. 주어진 숫자를 플라스틱 숫자로 만들어야 합니다.

2. 플라스틱 숫자 세트는 0~9까지 1개씩 존재합니다.

3. 6은 9로 뒤집어서 사용, 9은 6로 뒤집어서 사용이 가능합니다.

4. 필요한 플라스틱 숫자 세트 개수를 결과로 출력합니다.

 

알고리즘 진행 순서.

 

1. 입력된 정보를 저장합니다.

 

2. 주어진 숫자들을 순서대로 탐색합니다.

 

3. 필요한 세트의 개수를 결과로 출력합니다.

 

 

주어진 숫자 탐색.

 

주어진 숫자를 1개씩 탐색합니다.

 

플라스틱 숫자를 사용한 개수를 int[] 배열로 저장하여 확인합니다.

 

예를 들어 4425일 때

 

4425

 

0 1 2 3 4 5 6 7 8 9
0 0 0 0 1 0 0 0 0 0

세트 1개 구입!

4425

 

0 1 2 3 4 5 6 7 8 9
0 0 0 0 2 0 0 0 0 0

세트 1개 추가 구입!

4425

 

0 1 2 3 4 5 6 7 8 9
0 0 1 0 2 0 0 0 0 0

구입 X

4425

 

0 1 2 3 4 5 6 7 8 9
0 0 1 0 2 1 0 0 0 0

구입 X

 

예제입력 1.

 

1. 입력된 정보를 저장합니다.

N = 9999

 

2. 주어진 숫자들을 순서대로 탐색합니다.

 

주어진 숫자 탐색!
9999
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 1
 

세트 1개 구입!

 

9999
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 1 0 0 1

구입 X

숫자 9 대신 숫자 6을 뒤집어서 사용!

 

9999
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 1 0 0 2

세트 추가 1개 구입!

 

9999
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 2 0 0 2

구입 X

숫자 9 대신 숫자 6을 뒤집어서 사용!

 

 

3. 필요한 세트의 개수를 결과로 출력합니다.

 

구매한 세트 : 2개

 

2을 결과로 출력합니다.

 

  • BufferedReader를 사용하여 입력되는 정보를 저장합니다.
  • 주어진 숫자의 순서대로 탐색하여 세트 구입을 진행합니다.
  • 구입한 세트의 개수를 결과로 BufferedWriter 저장하였습니다.
  • BufferedWriter에 저장된 결과값을 출력하였습니다.

 

결과코드

import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        //입력값 처리하는 BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //결과값 출력하는 BufferedWriter
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String N = br.readLine();
        int[] count = new int[10];	//숫자 사용 확인 배열
        int answer = 1;	//최초 세트 1개 구입!
        //탐색 진행~
        for(int i=0;i<N.length();i++){
            //i번째 숫자
            int n = Character.getNumericValue(N.charAt(i));
            if(count[n] < answer)	//사용한 숫자가 구매한 세트보다 작을 때
                count[n]++;	//숫자 사용!
            else{		//사용한 숫자가 구매한 세트보다 클 때
                if(n == 6){		//숫자가 6일 때
                    if(count[9] < answer)	//9를 뒤집어서 사용가능할 때
                        count[9]++;	//숫자 사용!
                    else{	//9을 뒤집어서 사용하지 못할 때
                        count[n]++;	//숫자 사용!
                        answer++;	//세트 구입
                    }
                }else if(n == 9){	//숫자가 9일 때
                    if(count[6] < answer)	//6을 뒤집어서 사용가능할 때
                        count[6]++;		//숫자 사용!
                    else{	//6을 뒤집어서 사용하지 못할 때
                        count[n]++;	//숫자 사용!
                        answer++;	//세트 구입
                    }
                }else{		//그 이외에 숫자일 때
                    count[n]++;	//숫자 사용!
                    answer++;	//세트 구입
                }
            }
        }
        bw.write(answer + "");	//구입한 세트 BufferedWriter 저장
        bw.flush();		//결과 출력
        bw.close();
        br.close();
    }
}

댓글