[코딩 테스트 RUN] 코딩 기초 트레이닝 5일차

코테런/코딩 기초 트레이닝(완주)
2026.02.10

 

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

 

 

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;
    }
}