Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 중첩문
- 코딩테스트
- ZIP
- 중간 변수
- min heap
- 스택/큐
- 대소 비교
- 커리어
- deque
- 매직 넘버
- 함수화
- John Sonmez
- 가이드
- max-heap
- 탈출 조건
- 그리디
- 중첩
- enumerate
- 프로그래머스
- 힙
- permutations
- 2020 채용
- 가독성
- 파이썬
- boolean
- 함수
- 부등호
- 조합
- 변수명
- 임시 변수
Archives
- Today
- Total
Better Code, Better Life
숫자 야구 - 프로그래머스 - 파이썬 풀이 본문
문제 풀이
먼저 던질 수 있는 모든 경우의 수를 만듭니다.
get_candidates
그 다음 각각의 경우에 대해 주어진 결과(baseball)가 맞아떨어지는지 확인합니다.
하나라도 틀리면 그 후보는 넘어갑니다.
check_candidate
baseball에 대해 모두 통과시 가능한 답안이므로 answer_count값을 늘립니다.
클린 코드 작성법
-
코드 각각이 하나의 기능만 수행하도록 분리합니다.
- 123 ~ 987 까지 후보군을 만드는 함수
- 각 후보에 대해 baseball의 guess를 통과하는지 확인하는 함수
- 1개의 guess, 1개의 후보에 대해 서로 일치하는지 확인하는 함수
- permutations에서 나오는 출력형태가 튜플인데 이를 문자로 전환해주는 함수
-
묶여진 자료형을 다룰 때, 각각에 변수명을 붙여서 다루면 이해하기 쉬워집니다.
- guess_num, guess_strike, guess_ball = guess
-
if is_passed 처럼 boolean 값을 내놓는 변수명을 is_something 으로 붙이면 좋습니다.
해답 코드
from itertools import permutations
LENGTH = 3
def solution(baseball):
candidates = get_candidates(LENGTH)
answer_count = 0
for candidate in candidates:
is_passed = check_candidate(baseball, candidate)
if is_passed:
answer_count += 1
return answer_count
def get_candidates(length):
numbers = list(range(1, 10))
candidates = list(permutations(numbers, length))
return candidates
def check_candidate(baseball, candidate):
is_passed = True
for guess in baseball:
correct = check(guess, candidate)
if not correct:
is_passed = False
break
return is_passed
def check(guess, candidate):
guess_num, guess_strike, guess_ball = guess
guess_num_str = str(guess_num)
candidate_str = tuple_to_str(candidate)
strike = 0
ball = 0
for str1, str2 in zip(guess_num_str, candidate_str):
if str1 == str2:
strike += 1
elif str1 in candidate_str:
ball += 1
is_correct = True
if strike != guess_strike or ball != guess_ball:
is_correct = False
return is_correct
def tuple_to_str(tuple_):
result = ""
for number in tuple_:
result += str(number)
return result
도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!
코딩테스트 연습 - 숫자 야구 | 프로그래머스
[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]] 2
programmers.co.kr
'Coding Test > Programmers' 카테고리의 다른 글
체육복 - 프로그래머스 - 파이썬 풀이 (0) | 2019.10.11 |
---|---|
카펫 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.26 |
소수 찾기 - 프로그래머스 - 파이썬 풀이 (2) | 2019.08.19 |
모의고사 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.17 |
이중우선순위큐 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.15 |
Comments