백준 1475번: 방 번호

KimRiun·2021년 4월 26일
0

알고리즘_문제

목록 보기
8/26

사용 언어: python 3.7.4

❓ Problem

문제 설명

백준 1475번: 방 번호

문제

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

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

입력

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

출력

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

🚩 Solution

1. 접근법

  1. 각 숫자의 개수를 센다

    리스트의 인덱스를 방 번호로 하고, 인덱스마다 저장된 값은 해당 번호가 필요한 개수이다.

    6, 9의 예외성을 제외하고 생각해봤을 때, 가장 큰 개수만큼 세트가 필요하다.

  2. 숫자 6과 9는 둘의 개수를 평균한 값의 반올림을 각각 취한다.

    6과 9는 서로 대체 가능하므로 평균을 낸다.

    둘의 평균이 홀수일 경우, 평균보다 작으면 세트가 부족하다. 따라서 반올림을 해야 한다.

    가장 큰 수를 구할 것이므로 정확하게 어떤 숫자가 몇 개인지 따질 필요는 없다.

  3. 리스트에서 가장 큰 수를 구한다.

2. 코드

import sys
import math
N = sys.stdin.readline().strip()

list1 = list(map(int, N))
list2 = [0 for _ in range(10)]

for i in list1:
  list2[i] += 1

list2[6] = list2[9] = math.ceil((list2[6]+list2[9])/2)
print(max(list2))

3. 결과

채점 결과

correct

메모리시간코드길이
30888 KB68 ms220 B

시간 복잡도 분석

O(N)

📕 피드백

1. 검색한 내용

  1. 문자열에서 한글자씩 가져와 리스트로 저장하는 방법: list1 = list(string)
    • 숫자로 바꾸고 싶으면 map() 사용: list1 = list(map(int, string))
  2. 반올림하는 방법
    1. math 모듈: import math하고 math.ceil(num)를 사용하면 된다.
    2. 파이썬 내장함수 round() : 일반적인 반올림과 좀 다르다. 가까운 수로 반올림되니까 주의해서 써야한다.
  3. max(x) : x는 이터러블한 자료형(문자열, 리스트, 튜플 등)이 들어가야한다. 인수로 받은 자료형 내에서 최대값을 찾아서 반환해주는 파이썬 내장함수이다.

2. 실수

x

3. 발전 방향

2차원 리스트 초기화 방법

array = [[0] * m for _ in range(n)]

4. 느낀점

쉬웠다. 하지만 아직까지 파이써닉한 코드를 짜기에 부족함을 느껴서 여러 코드를 보고 분석하는게 필요하다고 생각한다. 따라서 고난이도 문제보다는 쉬운 문제를 여러 개 푸는 쪽으로 접근할 것이다.

profile
Java, Python

0개의 댓글