🐸 문제 정보
🤖 알고리즘
구현
⏱️ 풀이 시간
32.36m
📝 풀이
오랜만에 찐 구현 문제였다. 드디어...!!!
구현하면서 안써본 파이썬 메서드를 써봤는데 좋았다.
zip()
각 iterable에서 동일한 인덱스의 요소를 묶어서 튜플을 생성한다.
예를 들어, 두 개의 리스트를 zip으로 묶으면 각 리스트에서 같은 인덱스의 요소들이 순서대로 튜플로 묶이게 된다.
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
# zip을 사용하여 두 리스트 묶기
zipped = zip(list1, list2)
# (1, 'a')
# (2, 'b')
# (3, 'c')
str.zfill()
문자열 왼쪽에 0을 추가해서 주어진 길이로 맞춘다.
number = 35
desired_length = 4
# 숫자를 원하는 자리수로 맞춘 뒤 문자열로 변경
result = str(number).zfill(desired_length)
# 0035
두 메서드를 유의하고, 구현하는 방식은 아래와 같다.
- LED의 각 위치에 인덱스를 부여하고, 0부터 9까지 각 전광판이 켜지는 부분을 0과 1로 구분해서 채워넣는다.
- 본 포스팅에서 상정한 위치는 아래 이미지로 넣어놨다.
- 자리수에 맞춰놓은 현재 층수와, 자리수를 맞춰놓은 1부터 N까지 층수를 비교한다.
- 모든 숫자를 돌면서 바꿔지는 개수를 체크하고, P보다 작다면 바꿀 수 있기 때문에 +1
🧑💻 나의 답
# pypy3
import sys
input = sys.stdin.readline
nums = {}
nums[0] = [1, 1, 1, 0, 1, 1, 1]
nums[1] = [0, 0, 1, 0, 0, 1, 0]
nums[2] = [1, 0, 1, 1, 1, 0, 1]
nums[3] = [1, 0, 1, 1, 0, 1, 1]
nums[4] = [0, 1, 1, 1, 0, 1, 0]
nums[5] = [1, 1, 0, 1, 0, 1, 1]
nums[6] = [1, 1, 0, 1, 1, 1, 1]
nums[7] = [1, 0, 1, 0, 0, 1, 0]
nums[8] = [1, 1, 1, 1, 1, 1, 1]
nums[9] = [1, 1, 1, 1, 0, 1, 1]
n, k, p, x = list(map(int, input().rstrip().split()))
x = str(x).zfill(k)
res = 0
def find_change(p, n):
p, n = int(p), int(n)
return sum(x != y for x, y in zip(nums[p], nums[n]))
for tn in range(1, n + 1):
num = str(tn).zfill(k)
temp = 0
for i in range(k):
temp += find_change(x[i], num[i])
if (num != x) and (temp <= p):
res += 1
print(res)
'PS > 문제풀이' 카테고리의 다른 글
백준 15989 1, 2, 3 더하기 4 Python (0) | 2024.01.24 |
---|---|
백준 20006 랭킹전 대기열 Python (1) | 2024.01.24 |
백준 20437 문자열 게임 2 Python (0) | 2024.01.23 |
백준 1522 문자열 교환 Python (0) | 2024.01.23 |
백준 22233 가희와 키워드 Python (0) | 2024.01.23 |