프로그래머스 level 1
# 순위 계산 함수.
# 6개 1등 5개 2등 ... 1개 이하로 맞으면 6등
def calculate_order(count):
if count <= 1:
return 6
else:
return 7-count
def solution(lottos, win_nums):
answer = []
match_count = 0
zero_count = 0
high_order = 0
low_order = 0
# 먼저 맞은 번호 개수를 센다.
for num in win_nums:
for lotto in lottos:
if num == lotto:
match_count += 1
# 모르는 번호의 개수를 샌다.
for lotto in lottos:
if lotto == 0:
zero_count += 1
# 모르는 번호도 다 맞았을 때가 순위가 가장 높다
high_order = calculate_order(match_count+zero_count)
# 모르는 번호가 다 틀리면 가장 낮은 순위.
low_order = calculate_order(match_count)
answer.append(high_order)
answer.append(low_order)
return answer
# 문자열을 넣어서 숫자 이름이면 숫자로 변환해주는 함수.
def change_string_to_num(s):
if s == 'zero':
return 0
elif s == 'one':
return 1
elif s == 'two':
return 2
elif s == 'three':
return 3
elif s == 'four':
return 4
elif s == 'five':
return 5
elif s == 'six':
return 6
elif s == 'seven':
return 7
elif s == 'eight':
return 8
elif s == 'nine':
return 9
else:
return 10
def solution(s):
answer = 0
local = ''
# 들어온 문자열을 한 글자씩 읽는다.
# 숫자라면 바로 숫자로 변환해서 뒤에 붙이고, 문자라면 해당 문자가 숫자의 이름일 때까지 읽은 후 숫자로 변환해서 붙인다.
for c in s:
if c.isdecimal():
# 숫자 앞이 숫자 이름이었다면 해당 문자열도 문자로 변환해서 붙이고 넣어야함.
if local != '':
answer *= 10
answer += change_string_to_num(local)
local = ''
answer *= 10
answer += int(c)
else: #문자라면
local += c
# 문자열이 숫자 이름이 될 때, 붙인다.
if change_string_to_num(local) != 10:
answer *= 10
answer += change_string_to_num(local)
local = ''
# 만약 마지막이 문자열로 끝난다면, 마지막 숫자 이름을 붙여줘야 한다.
if change_string_to_num(local) != 10:
answer *= 10
answer += change_string_to_num(local)
return answer
처음에 False 대신 0을 줬더니 zero가 들어간 구문들에서 0이 안찍히는 문제 발생. 파이썬에서는 True 1 False 0 이 안되는 줄 알았는데, 3.0 ver 부터 된다고 한다..
C언어 사고방식을 가지고 python을 공부했다가 swift를 공부하니까... dictionary 같은 아름다운 기능들을 잘 못 써먹는게 아쉽다. 이것도 dictionary로 바꾸면 더 쉽게 구현할 수 있었을듯..!
swift로 풀 때는 dictionary를 이용해서 풀었다. String() Int() 의 결과값이 역시나.. Int? 이라서 오류를 엄청 만났다....
def solution(board, moves):
answer = 0
stck = []
for move in moves:
for i in range(len(board)):
# 하나의 열 안에서 움직이기 때문에 move 는 뒤에!
item = board[i][move-1]
board[i][move-1] = 0
# 인형이 있는 곳까지 내려가서 뽑고 스택에 넣고 계산
if item != 0:
# 스택이 비어있으면 넣고
if len(stck) == 0:
stck.append(item)
# 비어있지 않으면
else:
# 마지막 아이템과 같은지 확인하고 넣는다.
if stck[-1] == item:
stck.pop()
answer += 2
else:
stck.append(item)
# 인형은 하나만 뽑으면 되니 break
break
return answer
stack을 이용하는 문제였다! 로직은 쉬웠는데 머릿속에서 swift 문법이랑 짬뽕되어서... 0..<list.count 하던 버릇이 들어서...... len(list) 대신 list.count 찍다가 type error 20번쯤 봤다...
swift로 풀 때는... popLast() 의 Return 속성이 Element? 라서 많은 오류를 만났다.... 대신 if let 구문으로 optional chaining을 쓸 수 있었다.