TIL) 프로그래머스 기초 트레이닝 23-24 Day

2024. 12. 16. 18:48카테고리 없음

프로그래머스 기초 트레이닝

1) 부분 문자열

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

class Solution {
    public int solution(String str1, String str2) {
        return str2.contains(str1) ? 1 : 0;
    }
}

 

 

2) 꼬리 문자열

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

class Solution {
    public String solution(String[] str_list, String ex) {
        StringBuilder sb = new StringBuilder();
        for( String str : str_list ) {
            if( str.contains(ex) ) {
                continue;
            } else {
                sb.append(str);
            }
        }
        return sb.toString();
    }
}

 

 

3) 정수 찾기

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

class Solution {
    public int solution(int[] num_list, int n) {
        int answer = 0;
        for( int num : num_list ) {
            if( num == n ) answer = 1;
        }
        return answer;
    }
}

 

 

4) 주사위 게임 1

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        if( a % 2 == 1 && b % 2 == 1 ) // 모두 홀수일 때
            answer = (int) ( Math.pow(a,2) + Math.pow(b, 2) );
        else if ( a % 2 == 1 || b % 2 == 1) // 하나만 홀수일 때
            answer = 2 * ( a + b );
        else answer = Math.abs(a - b);
        return answer;
    }
}

 

참조

https://lktprogrammer.tistory.com/114

 

[JAVA] 자바 - Math 클래스 (수학 관련 처리 클래스)

안녕하세요. 이번 포스팅에서는 수학과 관련된 작업을 처리할 수 있는 Math 클래스에 대해서 알아보겠습니다. Math 클래스는 java.Lang 패키지에 포함된 클래스로 수학과 관련된 일련의 작업들을 처

lktprogrammer.tistory.com

https://coding-factory.tistory.com/531

 

[Java] 자바 거듭 제곱 구하기 Math.pow()

자바에서 특정값의 제곱을 구하려면 java.lang.Math 클래스의 pow()메소드를 사용하면 됩니다. java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공하고 있습니다. Math 클래스가 제공하는

coding-factory.tistory.com

 

5) 날짜 비교하기

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

class Solution {
    public int solution(int[] date1, int[] date2) {
        int answer = 0;
        if( date1[0] < date2[0] ) return 1;
        else if ( date1[0] == date2[0] && date1[1] < date2[1] ) return 1;
        else if ( date1[0] == date2[0] && date1[1] == date2[1] && date1[2] < date2[2] ) return 1;
        return answer;
    }
}

 

 

6) 커피 심부름

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

class Solution {
    public int solution(String[] order) {     
        int answer = 0;
        for( String a : order ) {
            if( a.contains("americano") ) answer += 4500;
            else if ( a.contains("cafelatte") ) answer += 5000;
            else answer += 4500;
        }
        return answer;
    }
}

 

풀이 과정

문제를 확인해보면 order의 원소는 여러가지가 있으나 ( 뜨거운 것, 찬 것 ) 의 가격차이가 없기 때문에

포함하고 있는지만 확인을 하면된다.

 

 

7) 그림 확대

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

class Solution {
    public String[] solution(String[] picture, int k) {
        
        String[] answer = new String[picture.length * k];
        
        for( int i = 0; i < picture.length; i++ ) {
            String pic = scale(picture[i], k);
            for( int j = i * k; j < k + ( i * k ); j++ ) 
                answer[j] = pic;
        }
        
        
        return answer;
    }
    
    private String scale( String pic, int scale ) {
        String[] p = pic.split("");
        StringBuilder sb = new StringBuilder();
        
        for( int i = 0; i < p.length; i++ ) {
            sb.append(p[i].repeat(scale));
        }
        return sb.toString();
    }
}

 

풀이 과정

대학교 때 글씨를 확대하는 과정이 어떻게 될까 하면서 생각을 한 것이긴한데, 코딩테스트로 확인을 해보니 신기하다..

 

해당 문제는 글씨의 스케일일 키우는 것인데

만약에 문자가 * 이고 k가 2라면

[*] =>  [**]

           [**] 

이렇게 된다.

간단하게 생각을 해보면

* 을 k 만큼 늘리고, k 만큼 똑같이 다음 배열에 추가를 해주면 끝난다.

 

private String scale 이 [*] => [**] 만큼 늘려주는 메소드이다.

메인에 있는 반복문이 그 [**] => [**][**]로 만들어주는 과정이다.

 

8) 조건에 맞게 수열 변환하기 3

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

import java.util.Arrays;
class Solution {
    public int[] solution(int[] arr, int k) {
        if( k % 2 == 1 ) return Arrays.stream(arr).map(item -> item * k).toArray();
        else return Arrays.stream(arr).map(item -> item + k).toArray();
    }
}

 

문제 풀이

stream API를 사용하면 한줄로 줄일수도 있다.

return Arrays.stream(arr).map(item -> k % 2 == 1 ? item * k : item + k).toArray();

이런식으로도 줄일 수 있다.

 

9) l로 만들기

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

class Solution {
    public String solution(String myString) {
        StringBuilder sb = new StringBuilder();
        
        for( int i = 0; i < myString.length(); i++ ) {
            if( myString.charAt(i) < 108 ) sb.append("l");
            else sb.append(myString.charAt(i));
        }
        return sb.toString();
    }
}

 

간단한 풀이

 

 

 

10) 특별한 이차원 배열 1

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        int a = 0;
        for( int i = 0; i < answer.length; i++, a++ ) {
            for( int j = 0; j < answer[i].length; j++ ) {
                if( j == a ) answer[i][j] = 1;
            }
        }
        return answer;
    }
}

 

 

풀이

a 라는 플레그를 새워두어 작성을 하였다.

하지만 생각을 잘 해보면 더욱 쉽고, 시간복잡도 또한 낮게 푸는 방법이 있다.

더보기

Java 에서는 int 배열이 만들어질때 처음부터 0으로 초기화가 되서 만들어진다.

 

이제 대각선으로  1 적히는 모습을 확인을 할 수 있는데,

[0,0], [1,1], [2,2], [3,3], ... , [ n, n ] 의 모습이 된다.

 

즉, 배열을 n * n 사이즈로 만들고 => int 배열 전부 0 으로 초기화

i 가 n 보다 작을 때,

[i, i] = 1 로 만들면

시간 복잡도도 O(n) 으로 만들 수 있다.

 

기존 코드의 시간 복잡도는 O(n^2) 이다.

 

 

느낀점

내일 배움 캠프까지 7일 남았다.

그 전까지 자바에 대한 기초는 때고 가고 싶다.

그리고 일본어 책 또한 구매를 하였는데, 한 동안은 죽었다 공부 해야겠다.