728x90
드디어 프로그래머스 레벨 1의 모든 문제를 다 풀었다!! 뿌듯-
- 비밀지도 -
https://programmers.co.kr/learn/courses/30/lessons/17681
이진수로 바꿀 때 bin 함수를 사용하였다.
처음엔 2개의 리스트를 순서대로 bin 함수를 사용하여 이진수를 바꾼 후 한번 더 for문을 사용하여 1과 0을 구분하려고 했다. 하지만 이중 for문은 너무 비효율적인 것 같아 다른 방법을 찾아 보다가 bin(i|j)라는 방법을 알게 되었다.
정답 코드
def solution(n, arr1, arr2):
answer = []
for i,j in zip(arr1, arr2) :
ans12 = str(bin(i|j)[2:])
ans12 = ans12.zfill(n)
ans12 = ans12.replace('0', ' ')
ans12 = ans12.replace('1', '#')
answer.append(ans12)
return answer
zip을 사용하여 리스트 2개를 묶어준 뒤 bin(i|j)로 i와 j중 하나라도 1이 있다면 1이 되도록 하여 불필요한 for문을 사용하지 않을 수 있었다.
bin 함수를 사용하면 가장 앞의 2글자는 1,0이 아니기에 슬라이싱을 해주었으며 zfill로 n만큼 자릿수를 채웠다.
이후 replace를 사용하여 공백과 #으로 대체하였다.
- 다트게임 -
https://programmers.co.kr/learn/courses/30/lessons/17682
정규화를 사용하여 문제를 풀 수 있었다.
아이디어가 떠오르지 않아 꽤 애를 먹었으며 다른 사람들의 풀이를 참고하여 겨우 풀었다.
정답 코드
import re
def solution(dartResult):
bonus = {'S' : 1, 'D' : 2, 'T' : 3}
option = {'' : 1, '*' : 2, '#' : -1}
p = re.compile("(\d+)([a-zA-Z])(\*|#)?")
dart = p.findall(dartResult)
for i in range(len(dart)):
if dart[i][2] == '*' and i > 0:
dart[i-1] *= 2
dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]
answer = sum(dart)
return answer
728x90