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

5일차 코테런. 아직 0단계이다.
코드 처리하기
문자열 code가 주어집니다.
code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.
mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.
mode가 0일 때
code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
mode가 1일 때
code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.
문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
문제 코드
class Solution {
public String solution(String code) {
String answer = "";
return answer;
}
}
문제 해설
이전 문제들의 종합문제 수준.
for문(반복문), if문(제어문), charAt 사용을 확인한다. 그리고 for문에서 continue를 사용할 수 있느냐가 이 문제의 중점이 된다. for문에서 continue란, 반복을 진행하되 이번만은 이 아래에 있는 코드(for문 내의)를 패스한다는 뜻이다. 이 부분만 확실히 숙지하고 있으면 어렵지 않다.
정답 코드는 여러가지가 가능하며, 길기 때문에 축약하는 방법도 여러가지이다.
정답
class Solution {
public String solution(String code) {
String answer = "";
int mode = 0;
char codeidx;
for(int i = 0; i<code.length(); i++){
codeidx = code.charAt(i);
if(codeidx == '1'){
mode = mode == 0 ? 1 : 0;
continue;
}
if(mode == 0){
if(i % 2 == 0) answer += codeidx;
} else {
if(i%2 == 1) answer += codeidx;
}
}
return answer == "" ? "EMPTY": answer;
}
}
등차수열의 특정한 항만 더하기
두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.
문제 코드
class Solution {
public int solution(int a, int d, boolean[] included) {
int answer = 0;
return answer;
}
}
문제 해설
푸는 방법이 여러가지 있는데, 처음 풀었을 때는 included의 0 인덱스와 a를 사용하여 수동 계산하였다. 이게 조금 번거로운 방법이고, 더 간단하고 좋은 해답으로는 a도 for문에 넣는 것이다. 그럼 i 등은 어떻게 처리해야할까?
일단 included[i] 자체가 boolean이므로 이것으로 true와 false를 처리하면 된다.
그리고 등차수열의 특징은 d를 계속 더한다는 지점이다. 즉, d * 2, d * 3, 형태가 가능하다는 의미이다. 따라서 a + i *d를 사용하면 쉬이 등차수열이 될 수 있다(i는 0에서 시작하므로, i * d하면 0이된다.)
정답
class Solution {
public int solution(int a, int d, boolean[] included) {
int answer = 0;
int sequence = a;
if(included[0])
answer += a;
for(int i = 1; i<included.length; i++){
sequence += d;
if(included[i]){
answer += sequence;
}
}
return answer;
}
}
좀 더 나은 해답
class Solution {
public int solution(int a, int d, boolean[] included) {
int answer = 0;
for (int i = 0; i < included.length; i++) {
if (included[i]) {
answer += a + i * d;
}
}
return answer;
}
}
주사위 게임 2
1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.
세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.
세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.
세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
문제 코드
class Solution {
public int solution(int a, int b, int c) {
int answer = 0;
return answer;
}
}
문제 해설
if와 else if문에서 AND를 사용할 수 있느냐를 본다. 다 같을 경우 a == b == c가 아니라 a == b && b == c형태로 사용해야한다. 그부분에 대해서 이해하면 어렵지 않다.
참고로 제곱은 그냥 곱하기 처리 등을 해도 되지만 이게 너무 긴 바람에 Math.pow를 써서 int로 형변환했다.…
정답
class Solution {
public int solution(int a, int b, int c) {
int answer = 0;
if(a == b && b == c)
answer = (a + b + c) * (int)(Math.pow(a,2) + Math.pow(b,2) + Math.pow(c,2) ) * (int)(Math.pow(a,3) + Math.pow(b,3) + Math.pow(c,3) );
else if (a != b && b != c && a != c)
answer = a + b + c;
else
answer = (a + b + c) * (int)(Math.pow(a,2) + Math.pow(b,2) + Math.pow(c,2));
return answer;
}
}
원소들의 곱과 합
정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.
문제 코드
class Solution {
public int solution(int[] num_list) {
int answer = 0;
return answer;
}
}
문제 해설
곱연산이 가능한가를 본다. *=를 사용한다. 여기서 중요한건 곱셈은 0이 아니라 1에서 시작해야한단 지점이다.
정답
class Solution {
public int solution(int[] num_list) {
int answer = 0;
int numlistPlus = 0;
int numlistMulti = 1;
for(int i = 0; i<num_list.length; i++){
numlistPlus += num_list[i];
numlistMulti *= num_list[i];
}
numlistPlus = (int)Math.pow(numlistPlus,2);
if(numlistPlus > numlistMulti)
answer = 1;
return answer;
}
}
이어 붙인 수
정수가 담긴 리스트 num_list가 주어집니다. num_list의 홀수만 순서대로 이어 붙인 수와 짝수만 순서대로 이어 붙인 수의 합을 return하도록 solution 함수를 완성해주세요.
문제 코드
class Solution {
public int solution(int[] num_list) {
int answer = 0;
return answer;
}
}
문제 해설
이전 더 큰 합을 나머지 연산, 그리고 배열과 합칠 수 있느냐의 문제다.
정답
class Solution {
public int solution(int[] num_list) {
int answer = 0;
String evens = "";
String odds = "";
for (int i = 0; i<num_list.length; i++){
if(num_list[i] % 2 == 0){
evens += "" + num_list[i];
} else {
odds += "" + num_list[i];
}
}
answer = Integer.parseInt(evens) + Integer.parseInt(odds);
return answer;
}
}
'코테런 > 코딩 기초 트레이닝(완주)' 카테고리의 다른 글
| [코딩 테스트 RUN] 코딩 기초 트레이닝 7일차 (0) | 2026.02.12 |
|---|---|
| [코딩 테스트 RUN] 코딩 기초 트레이닝 6일차 (0) | 2026.02.11 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 4일차 (0) | 2026.02.09 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 3일차 (0) | 2026.02.08 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 2일차 (0) | 2026.02.07 |
