2024. 3. 7. 20:26ㆍ코딩테스트 리뷰(프로그래머스)/코딩 기초 트레이닝 with Java
문제.1 - 마지막 두 원소
https://school.programmers.co.kr/learn/courses/30/lessons/181927
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
| 문제 설명 정수 리스트 num_list 가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return 하도록 solution 함수를 완성해주세요. 제한 사항
|
import java.util.*;
class Solution {
public int[] solution(int[] num_list) {
// 마지막 원소가 그전 원소보다 크면 마지막 원소 - 그전 원소 = 리턴
// 마지막 원소가 그전 원소가 크지 않으면 마지막 원소를 2배
int last = num_list[num_list.length- 1 ];
int before = num_list[num_list.length - 2];
int inputValue = last > before ? last - before : last * 2;
int[] answer = Arrays.copyOfRange(num_list, 0, num_list.length+1);
answer[num_list.length] = inputValue;
return answer;
}
}
풀이 해설
풀고 나서 수정을 더해서 올렸습니다.
해당 문제에서는 마지막 요소만 비교를 해서 answer 배열에 추가를 하는 형식이였습니다.
해서 num_list의 마지막 원소와 그전 원소만 따로 변수에 넣어두었습니다. ( 마지막원소 : last, 그전 원소 : before )
그다음 inputValue에서 비교해서 넣을 값을 만들어둡니다.
그 다음 answer 에서 Arrays 클래스로 num_list의 서브 배열을 만듭니다.
그 다음 answer 배열의 마지막에 inputValue를 넣어줍니다.
* 특이사항
Arrays.copyOfRange 에서 참조하는 배열의 크기를 넘어도 복사가 되더군요..?
복사되는 내용을 보니 마지막 원소가 0으로 되는 것을 디버그 모드로 확인했습니다.
아예 새로운 배열을 만들어서 넘겨주는 메소드인듯합니다.
문제 틀린점
문제 설명에서
- 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을
- => if ( last > before ) inputValue = last - before
- 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두배한 값을 추가하여
- => if ( last < before ) inputValue = last * 2
크면의 반대는 작거나 같다인데 조건문이 잘못되어있는 듯합니다. ( 지적 환영합니다. )
문제.2 - 수 조작하기 1
https://school.programmers.co.kr/learn/courses/30/lessons/181926
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
| 문제 설명 정수 n 과 문자열 control 이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.
제한 사항
|
class Solution {
public int solution(int n, String control) {
int answer = n;
for ( String c : control.split("")) {
switch(c) {
case "w" : answer++;
break;
case "s" : answer--;
break;
case "d" : answer+=10;
break;
case "a" : answer-=10;
break;
}
}
return answer;
}
}
문제.3 - 수 조작하기 2
https://school.programmers.co.kr/learn/courses/30/lessons/181925
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
| 문제 설명 정수 배열 numLog 가 주어집니다. 처음에 numLog[0] 에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.
주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요. 제한 사항
|
class Solution {
public String solution(int[] numLog) {
String answer = "";
for ( int i = 1; i < numLog.length; i++) {
int value = numLog[ i ] - numLog[ i-1 ];
switch(value) {
case 1 : answer += "w";
break;
case -1 : answer += "s";
break;
case 10 : answer += "d";
break;
case -10 : answer += "a";
break;
}
}
return answer;
}
}
문제.4 - 수열과 구간 쿼리 3
https://school.programmers.co.kr/learn/courses/30/lessons/181924
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
| 문제설명 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다. 각 query 마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다. 위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해주세요. 제한사항
|
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = arr;
for ( int i = 0; i < queries.length; i++ ) {
int temp = answer[queries[i][0]];
answer[queries[i][0]] = answer[queries[i][1]];
answer[queries[i][1]] = temp;
}
return answer;
}
}
문제.5 - 수열과 구간 쿼리 2
https://school.programmers.co.kr/learn/courses/30/lessons/181923
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
| 문제 설명 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s,e,k] 꼴입니다. 각 query마다 순서대로 s <= i <= e 인 모든 i에 대해서 k보다 크면서 가장 작은 arr[i]를 찾습니다. 각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요. 단, 특정 쿼리의 답을 존재하지 않으면 -1을 저장합니다. 제한사항
|
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = new int[queries.length];
for ( int count = 0; count < queries.length; count++) {
int[] subArr = Arrays.copyOfRange(arr, queries[count][0], queries[count][1]+1);
int min = Integer.MAX_VALUE;
for ( int i = 0; i < subArr.length; i++) {
if( subArr[i] < min && subArr[i] > queries[count][2]) min = subArr[i];
}
answer[count] = min == Integer.MAX_VALUE ? -1 : min;
}
return answer;
}
}
느낀점
몇일간 바뻐서 못했는데, 한 2~3일만에 잡아서 그런지 하나하나 푸는데 좀 오래좀 걸리네요.
다시 꾸준히 해보겠습니다.
다들 코딩 화이팅
'코딩테스트 리뷰(프로그래머스) > 코딩 기초 트레이닝 with Java' 카테고리의 다른 글
| 코딩 기초 트레이닝 Day 8 with Java (2) | 2024.04.15 |
|---|---|
| 코딩 기초 트레이닝 Day 7 with Java (4) | 2024.04.03 |
| 코딩 기초 트레이닝 Day 5 with Java (2) | 2024.03.04 |
| 코딩 기초 트레이닝 Day 4 with Java (0) | 2024.03.03 |
| 코딩 기초 트레이닝 Day 3 with Java (1) | 2024.03.01 |