Odds and Ends
백준 : 1475번 방 번호 [파이썬, 실버5, 구현] 본문
문제
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 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
'코딩 테스트' 카테고리의 다른 글
백준 : 10816 숫자 카드 2 [파이썬, 실버4, 이분탐색] (0) | 2022.07.11 |
---|---|
백준: 15312 이름 궁합 [파이썬, 구현] (0) | 2022.07.10 |
백준 : 10451 순열 사이클 [파이썬, 실버3] (0) | 2022.07.09 |
백준: 2331 반복수열 [파이썬, 실버 4] (0) | 2022.07.09 |
백준 : 9237번 이장님 초대 (0) | 2022.07.04 |