전공/coding test
프로그래머스 2 - 더 좋은 코드란. 기본은 틀리지 말자.
import ysy
2022. 3. 30. 13:55
오늘도 가장 쉬운 코딩테스트 문제를 하나 풀어봤다.
문제: 프로그래머스 - (추가예정)
난이도: Level 1
오늘도 기초적인 것에서 막혔다^^
능숙한 프로그래머가 되는 건 아직 멀었다ㅠㅠ
num_match, num_zero = 0
로 정의 하니까 아래와 같은 에러가 떴다.
cannot unpack non-iterable int object
이를 해결하기 위해서는
num_match = num_zero = 0
이렇게 ,가 아니라 =을 써주거나
num_match = 0
num_zero = 0
이렇게 나누어 주면 해결할 수 있다.
그리고 코드를 다 짰는데
def solution(lottos, win_nums):
num_match = num_zero = 0
for i in lottos:
if(i==0):
num_zero += 1
for j in win_nums:
if(i==j):
num_match += 1
answer = [min(6, 7 - num_match - num_zero), min(6, 7 - num_match)]
return answer
결과를 보니 zero인 경우가 제대로 구해지지 않은 것 같았다.
알고보니 lottos와 win_nums 두 배열을 헷갈린 것이었다.
문제에 아래처럼 주어졌었는데 간과한 것이다.
민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다.
아무튼 두 배열을 바꿔주어 코드를 완성했다.
그러고 나서 다른 사람이 짠 코드를 보니 아래와 같았다.
def solution(lottos, win_nums):
rank=[6,6,5,4,3,2,1]
cnt_0 = lottos.count(0)
ans = 0
for x in win_nums:
if x in lottos:
ans += 1
return rank[cnt_0 + ans],rank[ans]
rank array를 선언하여 1개만 맞춘 경우를 고려하지 않는다는 특징을 반영해주었다.
rack가 한눈에 보여서 내 코드보다 가독성이 좋아보였다.
또 나는 if문도 많이 쓰고 for문을 이중으로 썼는데 이 답안은 lottos.count(0)을 이용해 같은 값을 세련되게 구했다는 점에서 배울만한 것 같다.
또, 문제에
당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
라고 적혀있었는데
배열을 새로 만든 게 아니라 원소 두 개를 선택하여 반환한 점도 인상깊었다.
나는 내 코드도 투박하게 멋지다고 생각하지만 실력의 차이가 느껴지긴 했다.
그래서 lottos.count(0) 부분을 반영하여 내 코드를 더 멋지게 아래와 같이 수정해보았다.
def solution(lottos, win_nums):
num_match = 0
num_zero = lottos.count(0)
for i in win_nums:
if i in lottos:
num_match += 1
answer = [min(6, 7 - num_match - num_zero), min(6, 7 - num_match)]
return answer
반응형