
프로그래머스에서 낸 코딩 문제에 대한 해답이 들어있습니다.
열람 시 주의해주세요.

계속 달리는 코테런. 이번부터는 그냥 기본으로 주어지는 템플릿은 생략하기로 했다.
간단한 논리 연산
boolean 변수 x1, x2, x3, x4가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.
(x1 ∨ x2) ∧ (x3 ∨ x4)

문제 해설
true or false의 속성(if문에서의)과 AND 연산에 대한 숙지를 알아보는 문제다.
정답
class Solution {
public boolean solution(boolean x1, boolean x2, boolean x3, boolean x4) {
boolean answer = true;
boolean cal1 = true;
boolean cal2 = true;
if(!x1 && !x2)
cal1 = false;
if(!x3 && !x4)
cal2 = false;
if(cal1 && cal2)
answer = true;
else
answer = false;
return answer;
}
}
먼저 낸 해답은 위와 같지만,
더 좋은 해답은 아래와 같다. if문의 OR와 AND의 속성에 맞춘 적절한 풀이다.
class Solution {
public boolean solution(boolean x1, boolean x2, boolean x3, boolean x4) {
boolean answer = (x1||x2)&&(x3||x4);
return answer;
}
}
주사위 게임 3
1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.
네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.
주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.
네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.
네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
문제 해설
이번 문제는 Arrays와 Arrays.sort를 쓰느냐가 핵심이다. 그 외에는 if문의 반복이다. sort를 쓰지 않아도 가능하지만 너무 복잡해진다.
Arrays.sort(arr)
arr의 내용을 순차적으로 정리해 반환한다. 숫자라면 0부터 순차적으로, 한글이라면 ㄱ부터, 영어라면 a부터 세어 0번부터 순차적으로 반환한다.
정답
import java.util.Arrays;
class Solution {
public int solution(int a, int b, int c, int d) {
int answer = 0;
int[] arr = {a, b, c, d};
Arrays.sort(arr);
if(arr[0] == arr[3])
answer += arr[0] * 1111;
else if(arr[0] != arr[1] && arr[1] != arr[2] && arr[2] != arr[3])
answer += arr[0];
else if(arr[0] != arr[3] && arr[1] == arr[2]) {
if(arr[0] == arr[2] || arr[1] == arr[3]){
if(arr[0] == arr[1])
answer = (int)(Math.pow((10 * arr[0] + arr[3]),2));
else if(arr[3] == arr[1])
answer = (int)(Math.pow((10 * arr[3] + arr[0]),2));
} else {
answer = (arr[3] * arr[0]);
}
} else {
if(arr[1] == arr[0] && arr[2] == arr[3])
answer = (arr[3] + arr[0]) * (arr[3] - arr[0]);
else
if(arr[1] != arr[0])
answer = arr[0] * arr[1];
else
answer = arr[2] * arr[3];
}
return answer;
}
}
글자 이어 붙여 문자열 만들기
문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
문제 해설
이전 내용들과 로직 자체는 비슷하다. String.charAt()과 for문을 사용해서 배열 순환이 가능한가가 관점.
정답
class Solution {
public String solution(String my_string, int[] index_list) {
String answer = "";
for(int idx : index_list){
answer += my_string.charAt(idx);
}
return answer;
}
}
9로 나눈 나머지
음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.
문제 해설
number.length를 순회해서 글자를 추출하고 int로 형변환하여 합친뒤, 9로 나눈 나머지 연산을 하면 된다.
char에서 int로의 형변화는 별도로 하지 않아도 - '0' 처리로도 자동 형변환이 가능.
정답
class Solution {
public int solution(String number) {
int answer = 0;
for(int i = 0; i<number.length(); i++){
answer += number.charAt(i) - '0';
}
answer = answer % 9;
return answer;
}
}
문자열 여러 번 뒤집기
문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.
문제 해설
서로 스왑할 수 있느냐에 대한 이야기. 자세한 건 코드를 보는 게 빠르다.
정답
class Solution {
public String solution(String my_string, int[][] queries) {
String answer = my_string;
for(int[] query : queries){
int s = query[0];
int e = query[1];
int idx = e - s + 1;
for(int j = 0; j < idx / 2; j++){
int idxa = s + j;
int idxb = e - j;
char a = answer.charAt(idxa);
char b = answer.charAt(idxb);
answer = answer.substring(0, (idxa)) + b + answer.substring(idxa+1,idxb) + a + answer.substring(idxb+1);
}
}
return answer;
}
}
그리고 가장 많은 좋아요를 받은 코드는 아래와 같다.
class Solution {
char[] arr;
public String solution(String my_string, int[][] queries) {
arr = my_string.toCharArray();
for (int[] query : queries) {
reverse(query[0], query[1]);
}
return new String(arr);
}
private void reverse(int s, int e) {
while (s < e) {
char temp = arr[s];
arr[s++] = arr[e];
arr[e--] = temp;
}
}
}
일단 my_string을 String.toCharArray()을 통해 char로 된 배열로 반환한다.
String.toCharArray();
문자열을 toCharArray를 통하여 char로 된 배열로 반환한다.
이후 query를 순회하며 reverse 메서드를 실행한다.
int s는 query 0번째고, int e는 쿼리 1번째이므로 인자로 넣는다. 그렇게해서 while문으로 순회하며 s가 e보다 작은 동안 s는 늘어나고 e는 줄어들며, 서로를 바꿔나간다.
그리고 이렇게 만들어진 arr를 String형태로 출력하면 끝.
'코테런 > 코딩 기초 트레이닝(완주)' 카테고리의 다른 글
| [코딩 테스트 RUN] 코딩 기초 트레이닝 10일차: 문자열 (0) | 2026.02.15 |
|---|---|
| [코딩 테스트 RUN] 코딩 기초 트레이닝 9일차 (0) | 2026.02.14 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 7일차 (0) | 2026.02.12 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 6일차 (0) | 2026.02.11 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 5일차 (0) | 2026.02.10 |
