정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
2 ≤ num_list의 길이 ≤ 10
1 ≤ num_list의 원소 ≤ 9
num_list
result
[2, 1, 6]
[2, 1, 6, 5]
[5, 2, 1, 7, 5]
[5, 2, 1, 7, 5, 10]
입출력 예 #1
마지막 원소인 6이 그전 원소인 1보다 크기 때문에 6 - 1인 5를 추가해 return합니다.
입출력 예 #2
마지막 원소인 5가 그전 원소인 7보다 크지 않기 때문에 5의 두 배인 10을 추가해 return합니다.
1
2
3
defsolution(num_list):answer=[]returnanswer
배열의 각 원소에 접근하는 방법과, 이를 각각 추출해서 연산하는 방법을 이해해야 풀 수 있는 문제
배열의 -1번째 원소와 -2번째 원소를 비교해서 조건에 따라 연산해야 함
마지막 원소와 그 직전 원소를 각각 변수로 추출
조건문에 따라 두 원소를 비교하여 연산하는 식 작
1
2
3
4
5
6
7
8
9
10
11
12
defsolution(num_list):last=num_list[-1]# 마지막 원소
second_last=num_list[-2]# 뒤에서 두 번째 원소
# 마지막 원소가 이전 원소보다 크다면
iflast>second_last:num_list.append(last-second_last)# 마지막 원소가 이전 원소보다 작거나 같다면
else:num_list.append(last*2)returnnum_list
control 에 주어진 문자열을 한개씩 체크하면서 정해진 조건에 따라 n의 값이 바뀌어야 함
변수내 문자열을 iteration하는 방법과, 조건문, 산술연산을 할줄 알아야 풀 수 있는 문제
입력받은 정수 n 을 answer에 할당한 뒤
control을 순회하며 각 문자열을 하나씩 추출
추출된 문자열을 조건에 따라 일치여부를 확인한뒤 해당되는 연산을 하는 if~elif 문 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
defsolution(n,control):answer=n# 조건에 따른 문자별 연산식
forcharincontrol:ifchar=="w":answer=answer+1elifchar=="s":answer=answer-1elifchar=="d":answer=answer+10elifchar=="a":answer=answer-10returnanswer
1
2
3
4
테스트1입력값〉0,"wsdawsdassw"기댓값〉-1실행결과〉테스트를통과하였습니다.
iteration하는 것에 대한 개념과 문자열로 된 변수내 문자들을 하나씩 추출해서 활용하는 방법을 알면 쉽게 풀 수 있는 문제
정수 배열 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 ≤ numLog의 길이 ≤ 100,000
100,000 ≤ numLog[0] ≤ 100,000
1 ≤ i ≤ numLog의 길이인 모든 i에 대해 |numLog[i] - numLog[i - 1]|의 값은 1 또는 10입니다.
numLog
result
[0, 1, 0, 10, 0, 1, 0, 10, 0, -1, -2, -1]
“wsdawsdassw”
입출력 예 #1
result인 “wsdawsdassw”를 따라 numLog[0]에서부터 시작해 조작을 하면 numLog의 값과 순서대로 일치합니다. 따라서 “wsdawsdassw”를 return 합니다.
“수 조작하기 1” 문제의 n값이 numLog[0]에 해당하며, 이 문제에서 주어진 numLog에 따라 “수 조작하기 1” 문제의 control을 구하는 문제라고 이해할 수 있습니다.
입출력 예 #1은 “수 조작하기 1” 문제의 입출력 예 #1과 같은 예시이므로 참고하시기 바랍니다.
1
2
3
defsolution(numLog):answer=''returnanswer
numLog의 배열은 특정 키(w, a, s, d) 를 누를 때마다 변화하는 숫자의 로그값
배열의 첫번째 원소는 초기값이고, 그 다음 원소부터는 각 키(w,a,s,d)를 눌렀을때의 결과값을 의미하는 것
주어진 numLog를 가지고 어떤 키들을 눌러서 그 로그값이 나오는지를 역으로 찾아야 되는 문제
answer 에 빈 문자열 생성
numLog의 첫번재 원소부터 (0번째는 제외) 마지막 원소까지 iteration하는 for문 작성
현재원소와 이전 원소의 차이(diff)를 계산
이 diff로 어떤 값이 눌렸는지를 찾는 조건문을 작
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
defsolution(numLog):answer=''# 정답을 담을 변수 생성
# numLog 내 원소들을 순환
foriinrange(1,len(numLog)):# 현재원소와 이전원소간의 차이를 계산
diff=numLog[i]-numLog[i-1]# diff에 따라 눌려진 키 값을 추론
ifdiff==1:answer+='w'elifdiff==-1:answer+='s'elifdiff==10:answer+='d'elifdiff==-10:answer+='a'returnanswer
정수 배열 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
arr
queries
result
[0, 1, 2, 4, 3]
[[0, 4, 2],[0, 3, 2],[0, 2, 2]]
[3, 4, -1]
입출력 예 #1
첫 번째 쿼리의 범위에는 0, 1, 2, 4, 3이 있으며 이 중 2보다 크면서 가장 작은 값은 3입니다.
두 번째 쿼리의 범위에는 0, 1, 2, 4가 있으며 이 중 2보다 크면서 가장 작은 값은 4입니다.
세 번째 쿼리의 범위에는 0, 1, 2가 있으며 여기에는 2보다 큰 값이 없습니다.
따라서 [3, 4, -1]을 return 합니다.
1
2
3
defsolution(arr,queries):answer=[]returnanswer
queries 에 명시된 query 들이 통상적으로 검색조건 이므로 이들을 arr 의 idx로 이해를 하면 문제를 이해할 수 있다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i 는 arr에서 arr[s] 와 arr[e] 사이에 있는 원소를 의미한다.
이제 arr 에서 query 로 추출한 조건에 맞는 i 중에 정수 k 보다 작은 원소값 중 가장 작은 값을 추출하면 되는 것
이전 문제와 마찬가지로 queries를 순회하며 작업
queries에서 query를 추출해 각각 s, e, k를 추출
arr에서 s와 e를 활용해 조건을 충족하는 원소들 추출
추출된 원소들중 k 보다 큰 원소만 추출
추출된 값이 없으면 -1 을 answer 에 입력하고, 그렇지 않으면 min값을 answer에 입
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
defsolution(arr,queries):answer=[]forqueryinqueries:s,e,k=query# s와 e 인덱스에 해당하는 배열의 부분을 추출
sub_arr=arr[s:e+1]# k보다 큰 값만 추출
i_list=[iforiinsub_arrifi>k]# i_list가 비어있지 않으면 최소값을, 비어있으면 -1을 결과에 추가
ifi_list:answer.append(min(i_list))else:answer.append(-1)returnanswer
🚦 Summary
최근에는 GitHub 블로그를 생성하면 공개된 여러 테마를 그대로 Clone해와서 손쉽게 생성이 가능합니다.
다만 코드블록의 복사버튼은 별도로 기능 구현이 필요합니다.
이번 포스팅에서는 Minimal-mistake 테마로 만든 GitHub 블로그에서 ...
🚦 Summary
개인 포트폴리오로 하나의 레포지토리에 다양한 프로젝트를 관리하곤 합니다.
이때, README에 프로젝트를 간결하게 표로 정리하고 각 폴더의 링크를 제공하면 내 프로젝트들을 한눈에 보기 쉽게 제시할 수 있습니다.
하지만, 이 README의 표를 프로젝트...
댓글남기기