[프로그래머스 Python] 코딩테스트 입문 Day 14 - 조건문, 반복문, 시뮬레이션, 문자열
코딩테스트 입문 Day 14 조건문, 반복문, 시뮬레이션, 문자열
1. 가까운 수
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
array의 길이 ≤ 100 - 1 ≤
array의 원소 ≤ 100 - 1 ≤
n≤ 100 - 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.
(1) 코드 작성
def solution(array, n):
sorted_array = sorted(array, reverse=False)
answer = sorted(sorted_array, reverse=False, key=lambda x: abs(x-n))
return answer[0]
(2) 코드 리뷰 및 회고
- 문제는
array에서n과 가장 가까운 수를 구하는 것이다. - 위 조건을 만족하기 위해
sorted함수에서key파라미터를 설정하여 가장 가까운 수를 처음으로 올 수 있도록 설정했다.
(3) 실패 코드 공유🌞
def solution(array, n):
answer = sorted(array, reverse=False, key=lambda x: abs(x-n))
return answer[0]
- 위 결과가 왜 떴을 까 고민을 하면서 Test에 여러 경우를 추가해서 돌려보았다.
- 똑같은 수만 들어갔을 경우(이는 해당 X)
- 가까운 수가 두개 이상인 경우, 작은 값을 잘 반환하는지(이는 해당 X)
- array=[12, 14, 16], n=13을 넣어 12가 출력되는 것을 확인
- 순간 입력되는 array 값에서 [14, 12, 16]으로 들어온다면 n=13일 때 14가 반환된다는 사실을 알게되었다.
- 위 경우를 해결하기 위해 array를 1차 정렬(내림차순)해주고 정렬된 array를 사용하였다.
- 문제 해결 🌞
2. 369게임
머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.
제한사항
- 1 ≤
order≤ 1,000,000
(1) 코드 작성
def solution(order):
return len([int(n) for n in str(order) if n in '369'])
(2) 코드 리뷰 및 회고
- 문제는 숫자로 들어오는
order에 3, 6, 9가 포함되는 개수를 반환하는 것이다. - 위 조건을 만족시키기 위해 리스트 컴프리헨션으로 369가 포함된 경우를 가져오고,
len함수로 몇 개가 들어왔는지를 반환했다. - EASY 😎
3. 암호 해독
군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
- 암호화된 문자열
cipher를 주고받습니다. - 그 문자열에서
code의 배수 번째 글자만 진짜 암호입니다.
문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
cipher의 길이 ≤ 1,000 - 1 ≤
code≤cipher의 길이 cipher는 소문자와 공백으로만 구성되어 있습니다.- 공백도 하나의 문자로 취급합니다.
(1) 코드 작성
def solution(cipher, code):
answer = ""
for i in range(1, len(cipher)//code+1):
answer += cipher[code*i-1]
return answer
(2) 코드 리뷰 및 회고
cipher에서code번째 문자만 가져오기 위해range로 1부터cipher에서의code배수까지의 값을 지정했다.answer이라는 빈 문자열에cipher에서code의 배수에 해당하는 값을 추가했는데, 인덱스는 0부터 시작한다는 점에서 1을 빼주었다.- EASY 😎
4. 대문자와 소문자
문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
my_string의 길이 ≤ 1,000 my_string은 영어 대문자와 소문자로만 구성되어 있습니다.
(1) 코드 작성
import re
def solution(my_string):
answer = ""
for s in my_string:
l = re.sub("[a-z]", "", s)
if len(l) == 0:
answer += s.upper()
else:
answer += s.lower()
return answer
(2) 코드 리뷰 및 회고
- 문제는 입력값에서 소문자는 대문자로, 대문자는 소문자로 변환하는 것이다.
- 만약 소문자에 해당하는 경우는 대문자 처리해주기 위해
re모듈을 사용했다.re모듈을 사용하여 소문자는 ““로 제거- 소문자인 경우 ““가 되기 때문에 문자열의 길이는 0이다
- 소문자 처리 후 문자열이 사라지면
upper처리 - 소문자 처리 후 문자열이 사라지지 않으면
lower처리
- 모듈을 잘 활용하면 EASY 😎
👩🏻💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.
댓글남기기