코딩 기초 트레이닝 Day 5 with Java

2024. 3. 4. 08:24코딩테스트 리뷰(프로그래머스)/코딩 기초 트레이닝 with Java

문제.1 - 코드 처리하기

https://school.programmers.co.kr/learn/courses/30/lessons/181932

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명
 - 문자열 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 합니다.

제한사항
  • 1 <= code.length() <= 100000
    • code는 알파벳 소문자 또는 "1"로 이루어진 문자열입니다.


class Solution {
    public String solution(String code) {
        String ret = "";
        String[] code_idx = code.split("");
        for ( int idx = 0, mode = 0; idx < code_idx.length; idx++) {

            boolean code_eq_1 = code_idx[idx].equals("1");

            if( mode == 0 ) {
                if( !code_eq_1 && idx % 2 == 0 ) ret += code_idx[idx];
                if ( code_eq_1 ) mode = 1;
            } else {
                if( !code_eq_1 && idx % 2 != 0 ) ret += code_idx[idx];
                if ( code_eq_1 ) mode = 0;
            }
        }
        
        return ret == "" ? "EMPTY" : ret;
    }
}

 

*code_eq_1은 code[idx]가 "1"과 같은지 확인하는 변수입니다.

 

 

문제.2 - 등차수열의 특정한 항만 더하기

https://school.programmers.co.kr/learn/courses/30/lessons/181931

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문자 설명
 - 두 정수 a, d와 같이 길이가 n인 boolean배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i+1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해주세요.

제한사항
  • 1 <= a , d <= 100
  • 1 <= included.length <= 100
  • included에는 true가 적어도 하나 존재합니다.
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 + d * i ;
        }
        return answer;
    }
}

 

 

문제.3 - 주사위 게임2

https://school.programmers.co.kr/learn/courses/30/lessons/181930

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명
 - 1부터 6까지 숫자가 적힌 주사위 세 개 있습니다.
세 주사위를 굴렸을 때, 나온 숫자를 각각 a,b,c라고 했을 때, 얻는 점수는 다음과 같습니다.
  • 세 숫자가 모드 다르다면  a + b + c 점을 얻습니다.
  • 세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 ( a + b + c ) * ( a^2 + b^2 + c^2) 점을 얻습니다.
  • 세 숫자가 모두 같다면 ( a + b + c ) * ( a^2 + b^2 + c^2) * ( a^3 + b^3 + c^3 ) 점을 얻습니다.
세 정수 a,b,c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.


제한사항
  • a, b, c는 1이상 6이하의 정수입니다.
class Solution {
    public int solution(int a, int b, int c) {
        double answer = 0;
        if ( a != b && b != c && c != a) answer = a + b + c;
        if ( a == b && b == c && c == a)
            answer = (a + b + c) * ( a * a + b * b + c * c ) * (Math.pow(a,3) + Math.pow(b,3) + Math.pow(c,3));
        if ( a == b && b != c || a != b && b == c || a == c && b != a )
            answer = (a + b + c) * ( a * a + b * b + c * c );
        
        return (int)answer;
    }
}

 

풀이 설명

  • 첫번째 조건문이 a, b, c 모두 다를 경우
  • 두번째 조건문이 a, b, c 모두 같을 경우
  • 세번째 조건문이 세 정수중 하나만 다를 경우

 

문제.4 - 원소들의 곱과 합

https://school.programmers.co.kr/learn/courses/30/lessons/181929

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명
 - 정수가 담긴 리스트 num_list 가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.

제한사항 
  • 2 <= num_list.length <= 10
  • 1 <= num_list의 원소 <= 9
class Solution {
    public int solution(int[] num_list) {
        int sum_pow = 0;
        int mul = 1;
        for ( int num : num_list) {
            sum_pow += num;
            mul *= num;
        }
        sum_pow = (int) Math.pow(sum_pow, 2);
        
        return mul > sum_pow ? 0 : 1;
    }
}

 

 

문제.5 - 이어 붙인 수

https://school.programmers.co.kr/learn/courses/30/lessons/181928

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명
 - 정수가 담긴 리스트 num_list가 주어집니다.
num_list의 홀수만 순서대로 이어붙인 수와 짝수만 순서대로 이어 붙인 수의 합을 return하도록 solution 함수를 완성해주세요.

제한사항
  • 2 <= num_list.length <= 10
  • 1 <= num_list의 원소 <= 9
  • num_list에는 적어도 한 개씩의 짝수와 홀수가 있습니다.
class Solution {
    public int solution(int[] num_list) {
        int answer = 0;
        String even = "";
        String odd = "";
        for ( int num : num_list ) {
            if ( num % 2 == 0 ) odd += "" + num;
            else even += "" + num;
        }
        answer = Integer.parseInt(even) + Integer.parseInt(odd);
        return answer;
    }
}

 

 

느낀점

생각보다 기초하기 시작하면서 알고만 있던것들 쓰게되거나, 기억안나는 것들도 다시 적어보면서 배우니까 

재미있네요! 아침마다 하는 루틴이 된것같아서 뭐랄까 운동하는 느낌이 강하게 납니다 ㅋㅋㅋ

내일도 화이팅