Odds and Ends

백준 : 1475번 방 번호 [파이썬, 실버5, 구현] 본문

코딩 테스트

백준 : 1475번 방 번호 [파이썬, 실버5, 구현]

Squidward 2022. 7. 9. 21:30

문제

다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.

다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)

입력

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

출력

첫째 줄에 필요한 세트의 개수를 출력한다.

예제 입력 

9999

예제 출력 

2

예제 입력 2 

122

예제 출력 2 

2

 

 

[문제 풀이]

* 풀이 방법: 각 숫자가 중복되는 값을 저장할 인덱스 배열을 만들었다. 정렬해서 가장 큰 값으로 세트 수를 결정했다. 6, 9 일 때는 예외로 두어 처리했다. 6,9는 호환해서 사용 가능하여 중복되는 값을 2로 나누어 주었다. 여기서 중복되는 값이 홀/짝으로 나뉘는데 홀이면 +1, 아니면 그대로 두었다. (예를 들어 666이라는 중복값이 홀수로 떨어지는 수는 나누기 2를 할 시 3//2 = 1이기 때문이다. 따라서 +1을 해줘야한다.)

* 코드 설명

1) N을 입력받는다.

2) 각 숫자 별 중복값을 저장할 배열을 0~9까지 초기화한다.

3) 문자열 N의 각 자리수를 반복문으로 검사하며 배열의 각 인덱스 값으로 더해준다.

4) 여기서 six, nine 변수를 0으로 초기화하는데, 이 이유는 num[6]+num[9] 수식을 사용할 때 먼저 업데이트한 num[6]의 값이 들어가면 안되기 때문에 임시 변수를 만들어서 넣어주어야한다.

5) 홀/짝으로 나누어 홀일 시 +1, 아닐 시 그대로 //2를 한다

6) 임시 변수에 저장한 값으로 6,9의 배열 값을 업데이트한다.

7) 정렬 후 가장 큰 값 num[9]를 출력한다.  

 

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

 

728x90