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

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

문제.1 - 간단한 논리 연산

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

 

프로그래머스

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

programmers.co.kr

문제 설명
boolean  변수 x1, x2, x3, x4가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는  solution 함수를 작성해 주세요.

- ( x1 V x2 ) ^ ( x3 V x4 )
class Solution {
    public boolean solution(boolean x1, boolean x2, boolean x3, boolean x4) {
        boolean answer = true;
        answer = (x1 || x2) && (x3 || x4);
        return answer;
    }
}

 

문제.2 - 주사위 게임 3

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

 

프로그래머스

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

programmers.co.kr

문제 설명
1부터 6까지 숫자가 적힌 주사위 네 개 있습니다.
네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.

- 네 주사위에서 나온 숫자가 모두 p로 같다면 1111 x 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 함수를 작성해주세요.
class Solution {
    public int solution(int a, int b, int c, int d) {
        double answer = 0;
        int count = 0;
        
        // 4개의 주사위가 같은 경우
        if ( a == b && b == c && c == d ) answer = 1111 * a;
        
        // 3개의 주사위가 같은 경우
        else if ( b == c && c == d ) answer = Math.pow((10 * b + a), 2); // a 만 다를 때
        else if ( a == c && c == d ) answer = Math.pow((10 * a + b), 2); // b 만 다를 때
        else if ( a == b && b == d ) answer = Math.pow((10 * a + c), 2); // c 만 다를 때
        else if ( a == b && b == c ) answer = Math.pow((10 * a + d), 2); // d 만 다를 때
        
        // 2개씩 같은 경우
        else if ( ( a == b ) && ( c == d) ) answer = ( a + c ) * Math.abs( b - d );
        else if ( ( b == c ) && ( a == d) ) answer = ( b + a ) * Math.abs( c - d );
        else if ( ( a == c ) && ( b == d) ) answer = ( a + b ) * Math.abs( c - d );
        
        // 2개의 주사위만 같은 경우
        else if ( a == b ) answer = c * d;
        else if ( a == c ) answer = b * d;
        else if ( a == d ) answer = b * c;
        else if ( b == c ) answer = a * d;
        else if ( b == d ) answer = a * c;
        else if ( c == d ) answer = a * b;
        
        // 모두 다르게 나온 경우
        // Find_minimum
        else {
            answer = Math.min( a, b);
            answer = Math.min( answer, c);
            answer = Math.min( answer, d);
        }
        
        return (int)answer;
    }
}

 

잘 모르겠어서 길게 짰습니다.

 

문제.3 - 글자 이어 붙여 문자열 만들기

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

 

프로그래머스

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

programmers.co.kr

 

문제 설명

문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해주세요.
class Solution {
    public String solution(String my_string, int[] index_list) {
        String answer = "";
        String[] str = my_string.split("");
        for ( int index : index_list ) {
            answer += str[index];
        }
        return answer;
    }
}

 

문제.4 - 9로 나눈 나머지

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

 

프로그래머스

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

programmers.co.kr

문제 설명
음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.
class Solution {
    public int solution(String number) {
        String[] num = number.split("");
        int result = 0;
        for ( String n : num ) {
            result += Integer.valueOf(n);
        }
        return result %= 9;
    }
}

 

문제.5 - 문자열 여러 번 뒤집기

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

 

프로그래머스

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

programmers.co.kr

문제 설명

문자열 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[] str = my_string.split("");
        for ( int[] query : queries ) {
            for ( int i = query[0]; i <= (query[1] + query[0]) / 2 ; i++ ) {
                String temp = str[i];
                str[i] = str[query[1] + query[0] - i];
                str[query[1] + query[0] - i] = temp;
            }
        }
        return String.join("",str);
    }
}

 

문제 해설

해당 문제는 각 쿼리에 있는 숫자 s ~ e 까지 전부 뒤집으라는 말입니다.

만약에 0 ~ 7 까지라면 0의 숫자와 7의 숫자가 바뀌고 1 과 6,  2 와 5, 3 과 4 가 바뀌게 되어 총 4번을 바꾸면 됩니다.

그래서 2번째 for문에서 시작을 query 0에서 시작 마지막 을 0 + 7 / 2를 한 숫자 까지 하게 됩니다.

그 다음까지 전부 바꿔주는 역활이고 마지막으로 배열을 합쳐서 돌려줍니다.

 

느낀점

매번 이렇게 기초만 하는 데 , 배우는 것이 많네요

다른 사람들이 풀은 것도 보면서 배우고 찾아보면서 배우고 그러네요