[프로그래머스 Python] 코딩 기초 트레이닝 Day 6 - 조건문, 반복문
1. 마지막 두 원소
정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
제한사항
- 2 ≤ num_list의 길이 ≤ 10
- 1 ≤ num_list의 원소 ≤ 9
코드 작성
def solution(num_list):
if num_list[-1] > num_list[-2]:
num_list.append(num_list[-1] - num_list[-2])
else: num_list.append(num_list[-1]*2)
return num_list
2. 수 조작하기 1
정수 n과 문자열 control이 주어집니다. control은 “w”, “a”, “s”, “d”의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.
- “w” : n이 1 커집니다.
- ”s” : n이 1 작아집니다.
- “d” : n이 10 커집니다.
- “a” : n이 10 작아집니다.
위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.
제한사항
- -100,000 ≤ n ≤ 100,000
- 1 ≤ control의 길이 ≤ 100,000
- control은 알파벳 소문자 “w”, “a”, “s”, “d”로 이루어진 문자열입니다.
코드 작성
def solution(n, control):
for c in control:
if c == 'w': n += 1
elif c == 's': n -= 1
elif c == 'd': n += 10
else: n -= 10
return n
3. 수 조작하기 2
정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 “w”, “a”, “s”, “d”로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.
- “w” : 수에 1을 더한다.
- ”s” : 수에 1을 뺀다.
- “d” : 수에 10을 더한다.
- “a” : 수에 10을 뺀다.
그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.
주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.
제한사항
- 2 ≤ log의 길이 ≤ 100,000
- -100,000 ≤ log[0] ≤ 100,000
-
1 ≤ i ≤ log의 길이인 모든 i에 대해 log[i] - log[i - 1] 의 값은 1 또는 10입니다.
코드 작성
def solution(numLog):
answer = ''
for i, n in enumerate(numLog[:-1]):
if numLog[i+1] - n == 1:
answer += 'w'
elif numLog[i+1] - n == -1:
answer += 's'
elif numLog[i+1] - n == 10:
answer += 'd'
else:
answer += 'a'
return answer
4. 수열과 구간 쿼리 3
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.
각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 1,000
- 0 ≤ arr의 원소 ≤ 1,000,000
- 1 ≤ queries의 길이 ≤ 1,000
- 0 ≤ i < j < arr의 길이
코드 작성
def solution(arr, queries):
new_arr = arr
# 순서 바꾸기
for q in queries:
first_num = new_arr[q[0]]
second_num = new_arr[q[1]]
new_arr[q[0]] = second_num
new_arr[q[1]] = first_num
return new_arr
5. 수열과 구간 쿼리 2
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요. 단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
제한사항
- 1 ≤ arr의 길이 ≤ 1,000
- 0 ≤ arr의 원소 ≤ 1,000,000
- 1 ≤ queries의 길이 ≤ 1,000
- 0 ≤ s ≤ e < arr의 길이
- 0 ≤ k ≤ 1,000,000
코드 작성
def solution(arr, queries):
result = []
# 쿼리별 새로운 리스트 정의
for q in queries:
new_arr = arr[q[0]:q[1]+1]
new_num = []
# 특정 값보다 큰 숫자가 있다면 넣기
for n in new_arr:
if n > q[-1]:
new_num.append(n)
# 리스트에 담긴 요소 걸러내기
if len(new_num) < 1:
result.append(-1)
else: result.append(min(new_num))
return result
6. 문제 출처
👩🏻💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.
댓글남기기