[프로그래머스] Lv.1 로또의 최고 순위와 최저 순위

Tony Kim·2022년 1월 9일
0
post-thumbnail

[프로그래머스]

Lv.1 로또의 최고 순위와 최저 순위

1. 문제

일단 백준이 아니라 프로그래머스를 선택한 이유는 프로그래머스 홈페이지가 훨씬 user-friendly하게 구성되어있어서이다.

거의 처음으로 풀어보는 코딩테스트 문제인데 머리로는 쉽게 생각했지만 아직 실전에서의 문법이 익숙하지 않아 비교적 오래 걸렸다.

이번 문제는 임의의 0을 포함한 로또번호와, 당첨 로또번호를 input으로 받았을 때 최선과 최악의 상황을 output으로 return 하는 문제였다.

2. 풀이

일단 최선의 상황은 0으로 표기된 로또번호까지 당첨번호와 일치할 때고, 최악의 상황은 0으로 표기된 로또번호가 당첨번호와 모두 일치하지 않을 때이다.

그래서 먼저 당첨 번호와 몇 개의 번호가 같은지 count하고 여기에 0이 나온 횟수를 더하면 best case, 0을 제외하고 count만 하면 worst case로 분류해서 답을 도출하였다.

3. 코드

내가 작성한 코드

def solution(lottos, win_nums):
    zero = 0;
    same = 0;
    best = 0;
    worst = 0;
    for i in range(6):
        if lottos[i] == 0:
            zero = zero + 1
        for j in range(6):
            if lottos[i] == win_nums[j]:
                same = same + 1
            ㅤ    
    ㅤ
    if same == 0 or same == 1: 
        worst = 6
    elif same == 2:
        worst = 5
    elif same == 3:
        worst = 4
    elif same == 4:
        worst = 3
    elif same == 5:
        worst = 2
    else:
        worst = 1
    ㅤ
    if zero + same == 0 or zero+same == 1:
        best = 6
    elif zero + same == 2:
        best = 5
    elif zero + same == 3:
        best = 4
    elif zero + same == 4:
        best = 3
    elif zero + same == 5:
        best = 2
    else:
        best = 1
    ㅤ
    print(zero+same, same, best, worst)
    return [best, worst]

모범답안

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와 count를 이용해서 복잡한 코드를 굉장히 단순화 시킨 것이 놀라웠다.

  • count는 있는 줄도 몰랐는데... count로 0을 조회했다.
  • for문을 win_nums로 시작해서 그 값이 lottos에 있는지 확인하는 (if x in lottos) 것도 여기서 중요한 것 같음.
  • += 이건 까먹지 말자
  • rank라는 list에 먼저 1~6위가 나오는 케이스를 넣고 result값을 index로 활용해서 순위값에 접근했다.

참고

문자열

count(a)
find (‘a’) (위치 return) 없으면 -1
index (‘a’) (위치 return) 없으면 오류
join (문자열 삽입)
ex) “,”.join(‘abcd’) -> ‘a,b,c,d’
upper(), lower()
lstrip(), rstrip(), strip : 왼쪽 오른쪽 양쪽 공백 지우기
replace(“Life”, “Your leg”) : 문자열 대체
split(‘:’) : 문자열 나누기, 리스트로 반환
문자열 -> 리스트 list(a) or split
리스트 -> 문자열 “”.join(a)

리스트 추가

.append(a)
.insert(index, a)

리스트 더하기 +

.extend(추가할 리스트)

리스트 삭제

list.remove(a)
= del a[a.index(3)
>> l = [1,2,3,4,5] 
>> for i in l[:]: 
... print(i) 
... l.remove(i)
profile
Back-end-dev

0개의 댓글