우당탕탕 개발일지
[숫자] 소프티어 Softeer level 2 전광판 (Python 파이썬) 본문
💡문제 링크
💡문제 분석 요약
1. 전광판에 한 자리 수부터 다섯 자리 수까지 입력 가능하다.
2. 전광판에 표시된 숫자를 A에서 B로 바꿀 때 스위치를 최소한 몇 번 눌러야하는지 구하라.(A, B는 0으로 시작하지 않고, 서로 다름)
3. 전광판에 표시된 숫자를 A에서 B로 바꾸는 과정을 T번 반복(1<=T<=1000)
💡알고리즘 설계
1. 각 전광판에 번호를 붙이고, 각 숫자별로 전광판에서 어느 스위치가 켜지는지에 대한 정보를 switch 딕셔너리에 담는다
2. 자리수를 맞춰주기 위해 다섯 자리 미만의 수에는 앞에 "x"를 붙인다.(ex. 218 -> xx218)
따라서 switch에 "x"에 해당하는 스위치 정보도 담아야 한다(switch["x"] = [0, 0, 0, 0, 0, 0, 0])
c(스위치 누르는 횟수)를 0으로 초기화한다.
3. A와 B의 첫번째 원소부터 다섯번째 원소까지 돌아가면서 탐색
4-1. A와 B의 첫번째 원소 A1, B1에 대하여
A1에서 B1로 바꾸기 위해 스위치를 몇 번 눌러야하는지 구하고, 그 값을 c에 더하기
* A1에서 B1로 바꾸기 위해 스위치를 몇 번 눌러야하는지를 구하는 과정
1) switch[A1]와 switch[B1]의 각 원소를 비교한다
2) 원소의 값이 다르면 스위치를 켰다는 의미이므로, c에 1만큼 더한다
4-2. A와 B의 첫번째 원소 A2, B2에 대하여
A2에서 B2로 바꾸기 위해 스위치를 몇 번 눌러야하는지 구하기
...
4-5. A와 B의 첫번째 원소 A5, B5에 대하여
A5에서 B5로 바꾸기 위해 스위치를 몇 번 눌러야하는지 구하기
5. c 출력하
💡코드
import sys
switch = {
"0": "1110111",
"1": "0010010",
"2": "0111101",
"3": "0111011",
"4": "1011010",
"5": "1101011",
"6": "1101111",
"7": "1110010",
"8": "1111111",
"9": "1111011",
"x": "0000000"
}
t = int(input())
for _ in range(t):
# 전처리
a, b = input().split(" ")
a = "x" * (5 - len(a)) + a
b = "x" * (5 - len(b)) + b
c = 0
# 각 자리수에 대하여 반복
for i in range(5):
for j in range(7):
if switch[a[i]][j] != switch[b[i]][j]:
c += 1
print(c)
💡 오답 풀이
switch 딕셔너리에 값 잘못넣음..
처음에는 A, B 자리수가 같은 경우와 다른 경우 두 가지로 나누어서 풀었는데, 코드가 너무 길어졌다.
그래서 A, B가 다섯 자리수 미만인 경우 부족한 만큼 앞에 "x"를 붙이는 전처리를 진행해줬다.
💡 다른 풀이
import sys
switch = {
"0": [1, 1, 1, 0, 1, 1, 1],
"1": [0, 0, 1, 0, 0, 1, 0],
"2": [0, 1, 1, 1, 1, 0, 1],
"3": [0, 1, 1, 1, 0, 1, 1],
"4": [1, 0, 1, 1, 0, 1, 0],
"5": [1, 1, 0, 1, 0, 1, 1],
"6": [1, 1, 0, 1, 1, 1, 1],
"7": [1, 1, 1, 0, 0, 1, 0],
"8": [1, 1, 1, 1, 1, 1, 1],
"9": [1, 1, 1, 1, 0, 1, 1],
"x": [0, 0, 0, 0, 0, 0, 0]
}
t = int(input())
for _ in range(t):
# 전처리
a, b = input().split(" ")
a = "x" * (5 - len(a)) + a
b = "x" * (5 - len(b)) + b
c = 0
# 각 자리수에 대하여 반복
for i in range(5):
for j in range(7):
if switch[a[i]][j] != switch[b[i]][j]:
c += 1
print(c)
switch 딕셔너리의 value를 리스트형태로 해서 런타임에러가 발생하는줄 알았는데, 그런 문제는 아니었다.
💡 느낀점 or 기억할정보
1. 정수에서는 인덱싱 불가능!!! 인덱싱 해주기 위해 정수가 아닌 문자열로 값을 받음
'알고리즘' 카테고리의 다른 글
[숫자] Softeer level2 8단 지도 자동 구축 (Python 파이썬) (0) | 2024.03.14 |
---|---|
[조건문] Softeer level2 8단 변속기 (Python 파이썬) (0) | 2024.03.14 |
[스택/큐] 프로그래머스 level 1 같은 숫자는 싫어 (Python 파이썬) (0) | 2024.03.06 |
[DFS/BFS] 백준 14502번: 연구소 Gold IV(Python 파이썬) (0) | 2024.02.14 |
[DFS/BFS] 백준 18352번: 특정 거리의 도시 찾기 Silver II (Python 파이썬) ⭐ (0) | 2024.02.14 |