Photo by Pietro Mattia on Unsplash
def solution(lottos, win_nums):
lotto_exc_zero = list(filter(lambda x: x != 0, lottos))
zero_cnt = len(lottos) - len(lotto_exc_zero)
answers = {
6 : 1,
5 : 2,
4 : 3,
3 : 4,
2 : 5,
1 : 6,
0 : 6
}
answer = 0
for lotto_num in lottos:
if lotto_num in win_nums:
answer+=1
return [answers[answer+ zero_cnt],answers[answer]]
로또번호에서 0의 개수를 구하고 나머지 숫자들이 일치하는 값이 있는지 검사하고 그 값을 통해 순위를 맞추면 되는 문제
처음 문제에 접근했을 때 if else문을 쓰지 않기 위해 dictionary를 쓰려고 했다. 그러나 오히려 코드가 너무 길어지고 가독성이 떨어졌다. 그래서 아래와 같이 리스트 인덱스(규칙성이 보이기에)로 고치고 0의 갯수를 구하는 것도 count 내장함수로 바꾸는게 더 효율적이고 보기 좋을 것 같아서 변경했다.
def solution(lottos, win_nums):
zero_cnt = lottos.count(0)
answers = [6,6,5,4,3,2,1]
answer = 0
for lotto_num in lottos:
if lotto_num in win_nums:
answer+=1
return [answers[answer+ zero_cnt],answers[answer]]
def solution(numbers, hand):
l_cond = [1, 4, 7, -1]
mid_cond = [2, 5, 8, 0]
r_cond = [3, 6, 9, -1]
l_now, r_now = [3,0] , [3,2]
answer = []
for number in numbers:
if number in l_cond:
answer.append('L')
l_now = [l_cond.index(number), 0]
elif number in r_cond:
answer.append('R')
r_now = [r_cond.index(number),2]
else:
num_now = [mid_cond.index(number) , 1]
l_diff_abs = abs(num_now[0] - l_now[0]) + abs(num_now[1] - l_now[1])
r_diff_abs = abs(num_now[0] - r_now[0]) + abs(num_now[1] - r_now[1])
if l_diff_abs == r_diff_abs:
if hand[0] == 'l':
l_now = num_now
else:
r_now = num_now
answer.append(hand[0].upper())
else:
if l_diff_abs > r_diff_abs:
r_now = num_now
answer.append('R')
else:
l_now = num_now
answer.append('L')
return ''.join(answer)
핸드폰 숫자 키패드를 누르는 조건에 맞춰 왼쪽을 누르는 조건이 맞다면 'L'을 오른쪽이라면 'R'을 문자열에 순서대로 넣어 반환하는 문제다.
여러 오류들을 겪었지만 몇 가지만 여기에 적어보고 어떻게 문제를 해결했는지 적어보려고 한다.
가볍게 훑어본 바로 숫자 차이 == 키패드와의 거리라고 생각함(처음부터 효율적인 코드를 짜려고 노력하다가 생긴 문제점)
역시 구현이 가능한 제일 쉬운 방법부터 쓰기 시작해서 고쳐나가는 방법이 제일 좋은 것 같다. 우선은 프로그래머스 레벨1에서는 그 방법론을 먼저 배우는 것 같아서 너무 좋다. 이제 카카오 문제만 다 풀면 레벨2로 넘어간다.