Day6
- 마지막 두 원소
- 수 조작하기 1
- 수 조작하기 2
- 수열과 구간 쿼리 3
- 수열과 구간 쿼리 2
마지막 두 원소
문제 설명
정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
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
def solution(l):
l.append(l[-1]-l[-2] if l[-1]>l[-2] else l[-1]*2)
return l
삼항 연산자로 간단하게도 가능
수 조작하기 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 함수를 완성해 주세요.
def solution(n, control):
for i in control:
if i == "w": n += 1
elif i == "s": n -= 1
elif i == "d": n += 10
else: n -= 10
return n
제일 많은 정석적인.. 풀이? 인듯
def solution(n, control):
answer = n
c = { 'w':1, 's':-1, 'd':10, 'a':-10}
for i in control:
answer += c[i]
return answer
딕셔너리를 이용해서 키-값으로 더한 풀이, 신박하다
수 조작하기 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 함수를 완성해 주세요.
def solution(numLog):
answer = ''
for i in range(1, len(numLog)):
if numLog[i-1] + 1 == numLog[i]:
answer += "w"
elif numLog[i-1] - 1 == numLog[i]:
answer += "s"
elif numLog[i-1] + 10 == numLog[i]:
answer += "d"
else:
answer += "a"
return answer
전 문제랑 비슷한듯 어려움
나는 현재값 +n이 다음값과 같다면 ~ 이런식으로 해석하고 풀었는데
def solution(numLog):
answer = ''
for i in range(1, len(numLog)):
dif = numLog[i] - numLog[i - 1]
if dif == 1:
answer += 'w'
elif dif == -1:
answer += 's'
elif dif == 10:
answer += 'd'
elif dif == -10:
answer += 'a'
else:
pass
return answer
다른 사람들은 이런식으로 현재값과 이전값의 차이를 이용해서 구한 것 같다.
이런 문제 풀 때, 인덱스에러 나만 많이 나오나.. 주의해가며 풀어야겠다.
수열과 구간 쿼리 3
문제 설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
def solution(arr, queries):
for query in queries:
for i in range(1, 2):
j = query[i-1]
k = query[i]
arr[j], arr[k] = arr[k], arr[j]
return arr
중첩 반복문 .. 이런 문제에 쓰면 안된다는 것을 알지만 해결법이 떠오르지 않았어 ㅠ
def solution(arr, queries):
for a,b in queries:
arr[a],arr[b]=arr[b],arr[a]
return arr
다른 사람 풀이:
반복문 이렇게 두 개의 값을 가져올 수 있는지.. 몰랐어요 ~~^^
쿼리 안의 쿼리를 인덱스로 이용해서 리스트 원소 교환
수열과 구간 쿼리 2
문제 설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
def solution(arr, queries):
answer = []
temp = []
for s,e,k in queries:
new_arr = arr[s:e+1]
temp = [i for i in new_arr if i > k]
if temp:
value = min(temp)
answer.append(value)
else:
answer.append(-1)
return answer
아오 .....어렵다 .....ㅠㅠ 힌트랑 이것저것 도움받고 결국 성공 ...
1. arr 배열을 인덱스 s~e까지 자르기
2. 잘린 배열을 반복문을 통해 k보다 큰 값 찾아서 temp에 넣기
3. temp가 비어있지 않을 때, temp의 최솟값 찾기, 비어있으면 answer은 -1
4. 최솟값을 최종값으로 저장 answer에 담기
5. answer 반환 끝........
ㅠㅠ 머리가 굳었나봐요 5문제 푸는 시간이 점점 길어지고 있다 .......
오늘은 약 두 시간 반정도 소요 ....
'코테' 카테고리의 다른 글
프로그래머스 기초문제 Day8 조건문, 문자 (2) | 2024.01.08 |
---|---|
프로그래머스 기초문제 Day7 반복문 (1) | 2024.01.07 |
프로그래머스 기초문제 Day5 조건문 (1) | 2024.01.05 |
프로그래머스 기초문제 Day4 연산, 조건문 (1) | 2024.01.04 |
프로그래머스 기초문제 Day3 연산 (1) | 2024.01.03 |