마지막 두 원소
문제설명
정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
첫번째 시도
def solution(num_list):
if num_list[-1]>num_list[-2]:
a=num_list[-1]-num_list[-2]
return num_list.append(a)
else:
b=num_list[-1]*2
return num_list.append(b)
해결
def solution(num_list):
if num_list[-1] > num_list[-2]:
a = num_list[-1] - num_list[-2]
num_list.append(a)
else:
b = num_list[-1] * 2
num_list.append(b)
return num_list
append 메서드는 리스트에 요소를 추가하고 리스트 자체를 수정하는 메서드로, 반환값이 없다.
따라서 append 메서드를 호출하면 None을 반환하게 된다.
이 문제를 해결하려면 append 메서드로 요소를 리스트에 추가한 후에, 리스트 자체를 반환해야 한다
수 조작하기 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):
n=0
for c in range(control):
if c =='w':
n+=1
elif c =='s':
n-=1
elif c=='d':
n+=10
elif c=='a':
n-=10
return n
🤔 for i in range(control) 과 for i in control 차이점이 무엇일까?
-for i in range(control) :
- range() 함수는 정수를 인자로 받는다.
- 일정 범위의 연속된 정수를 생성한다.-> 리스트나 튜플을 반환하지 않는다.
- 따라서 리스트로 반환을 하고 싶다면 list(range(1,11)) 이렇게 해야한다.
- 따라서 구구단을 만들 때 range 를 사용할 수 있다.
-for i in control :
- 리스트나 튜플 같은 반복가능한 객체를 받을 때 각 요소를 순회한다.
해결 코드
def solution(n, control):
for c in control:
if c == 'w':
n += 1
elif c == 's':
n -= 1
elif c == 'd':
n += 10
elif c == 'a':
n -= 10
return n
수열과 구간 쿼리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:
i = query[0]
j = query[1]
arr[i], arr[j] = arr[j], arr[i]
return arr
👩🏻💻 두 변수의 값을 교환하는 방법
1. 임시변수 사용하기
반적인 할당문으로는 임시 변수를 사용해야 한다. 예를 들어 a와 b를 교환하려면 다음과 같은 코드를 사용한다.
>>> temp = a
>>> a = b
>>> b = temp
임시변수를 사용하는 이유는 ?
이유는 두 변수의 값을 서로 교환할 때, 원래의 값을 잃지 않기 위해서이다.
직접적인 교환을 시도하면 값이 덮어쓰여져 원래의 값을 잃을 수 있다.
2. 튜플할당 사용하기
a, b = b, a
=의 왼쪽은 튜플 변수이고, 오른쪽은 튜플 표현식이다. 각각의 값은 그에 해당하는 변수에 할당된다.
오른쪽의 모든 표현식이 평가된 이후에 할당이 시작된다.
📌 튜플(tuple):
-tuple(튜플)은 불변한 순서가 있는 객체의 집합
-list형과 비슷하지만 한 번 생성되면 값을 변경할 수 없다.(내용변경불가)
-list와 마찬가지로 다양한 type 이 섞일 수 있다.
-list와 마찬가지로 순서가 있어서 인덱스로 접근이 가능하다.
참고자료: https://velog.io/@kpl5672/Python-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%EC%9E%91%ED%95%98%EA%B8%B0
수열과 구간쿼리 2
문제설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
def solution(arr, queries):
results = []
for query in queries:
s = query[0]
e = query[1]
k = query[2]
answer = [arr[i] for i in range(s, e + 1) if arr[i] > k]
if answer:
results.append(min(answer))
else:
results.append(-1)
return results
'Algorithm' 카테고리의 다른 글
[Python] 프로그래머스 트레이닝 챌린지 D8 (8) | 2024.07.24 |
---|---|
[Python] 프로그래머스 트레이닝 챌린지 D7 (2) | 2024.07.23 |
[Python] 프로그래머스 트레이닝 챌린지 D5 (0) | 2024.07.21 |
[Python] 프로그래머스 트레이닝 챌린지 D4 (0) | 2024.07.18 |
[Python] 프로그래머스 트레이닝 챌린지 D3 (0) | 2024.07.17 |