
1. 마지막 두 원소
문제 설명
정수 리스트 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] |
class Solution {
public int[] solution(int[] num_list) {
int[] answer = new int[num_list.length+1];
int num1 = num_list[num_list.length-1];
int num2 = num_list[num_list.length-2];
if(num1>num2){
answer[answer.length-1]=num1-num2;
} else {
answer[answer.length-1]=num1*2;
}
for(int i =0; i<num_list.length; i++){
answer[i] = num_list[i];
}
return answer;
}
}
어떤 조건에서든 num_list보다 answer 배열에 값이 1개 더 추가되는 것이므로
길이를 1 늘려서 배열을 만들어준 후, 해당 조건에 맞게 마지막값과 그 전 값을 비교하여 answer에 넣었습니다.
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"로 이루어진 문자열입니다.
입출력 예
| n | control | result |
| 0 | "wdsawsdassw" | -1 |
class Solution {
public int solution(int n, String control) {
for(int i =0; i<control.length(); i++){
if(control.charAt(i)=='w'){
n+=1;
} else if(control.charAt(i)=='s'){
n-=1;
} else if(control.charAt(i)=='d'){
n+=10;
} else{
n-=10;
}
}
return n;
}
}
control을 각각 charAt으로 한글자씩 구분하여
각각에 해당하는 조건에 맞게 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 ≤ 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" |
class Solution {
public String solution(int[] numLog) {
String answer = "";
for(int i =1; i<numLog.length; i++){
switch(numLog[i]-numLog[i-1]){
case 1 : answer+="w"; break;
case -1 : answer+="s"; break;
case 10 : answer+="d"; break;
case -10 : answer+="a"; break;
}
}
return answer;
}
}
numLog[i]의 값이 그 전 값과 얼마의 차이가 나느냐로
어떤 문자열을 입력받았는지 확인할 수 있으므로
해당 조건을 걸어 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의 길이
입출력 예
| arr | queries | result |
| [0,1,2,3,4] | [[0,3],[1,2],[1,4]] | [3,4,1,0,2] |
class Solution {
public int[] solution(int[] arr, int[][] queries) {
for(int i =0; i<queries.length; i++){
int temp = arr[queries[i][0]];
arr[queries[i][0]] = arr[queries[i][1]];
arr[queries[i][1]] = temp;
}
return arr;
}
}
queries 배열 안에 있는 값을 arr의 idx로 보고 서로 교체하는 것이기 때문에
다음과 같이 반복문을 사용하여 다음값으로 넘어가게 하면서,
arr의 해당 idx들의 자리를 교체하였습니다.
4. 수열과 구간 쿼리 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
입출력 예
| arr | queries | result |
| [0,1,2,4,3] | [[0,4,2],[0,3,2],[0,2,2]] | [3,4,-1] |
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = new int[queries.length];
for(int i =0; i<answer.length; i++){
answer[i] = 1000001;
}
for(int i =0; i<queries.length; i++){
for(int j =queries[i][0]; j<=queries[i][1]; j++){
if(arr[j]>queries[i][2]){
if(answer[i]>arr[j]){
answer[i] = arr[j];
}
}
}
if(answer[i] == 1000001){
answer[i]=-1;
}
}
return answer;
}
}
조건에서의 k의 값은 1000000을 넘을 수 없기 때문에
answer 배열을 1000001로 채운 후
조건에 맞는 반복문을 돌리고,
이미 들어있는 answer값보다 arr값이 작을때
arr값을 넣고 반복하여, 가장 작은 값이 들어가게 하였습니다.
'프로그래머스 > Lv. 0 코딩 기초 트레이닝' 카테고리의 다른 글
| [프로그래머스] 코딩 기초 트레이닝 8일차 - 간단한 논리 연산 (0) | 2023.11.10 |
|---|---|
| [프로그래머스] 코딩 기초 트레이닝 7일차 - 수열과 구간 쿼리 4 (0) | 2023.11.08 |
| [프로그래머스] 코딩 기초 트레이닝 5일차 - 코드 처리하기 (0) | 2023.11.06 |
| [프로그래머스] 코딩 기초 트레이닝 4일차 - n의 배수 (1) | 2023.11.03 |
| [프로그래머스] 코딩 기초 트레이닝 3일차 - 문자열 섞기 (0) | 2023.11.02 |