[프로그래머스 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 😎
👩🏻💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.
댓글남기기