프로그래머스 문제풀이/알고리즘 (JAVA)

[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (150~161번 문제풀이)

남건욱 2023. 10. 17. 22:25
반응형
150. 원하는 문자열 찾기

문제

class Solution {
    public int solution(String myString, String pat) {
        int answer = 0;
        
        if(myString.toLowerCase().contains(pat.toLowerCase())){
            answer = 1;
        }
        
        return answer;
    }
}

<작성한 코드>

myString과 pat을 모두 toLowerCase()를 사용해서 소문자로 변경했다. 그 뒤에 contains을 사용해서 포함되는지 체크하고 포함된다면 answer에 1을 대입했다. 만약 포함되지 않는다면 0이 담긴 상태에서 반환될 것이다.

 

 

 

 

151. 길이에 따른 연산

문제

class Solution {
    public int solution(int[] num_list) {
        int answer = 1;
        
        if(num_list.length >= 11){
            for(int i=0; i<num_list.length; i++){
                answer += num_list[i];
            }
        } else{
            for(int i=0; i<num_list.length; i++){
                answer *= num_list[i];
            }
        }
        
        if(num_list.length >= 11) answer--;
        
        return answer;
    }
}

<작성한 코드>

answer을 1로 초기화해 줬다. 그 뒤 배열의 길이가 11 이상이면 answer에 원소들의 합을 더해줬고, 아니라면 원소들의 곱을 넣어줬다. 마지막 if에서는 배열의 길이가 11이상이면 -1을 해줬다. 이유는 초기값이 1이기 때문에 1이 큰 상태이기 때문이다.

 

 

152. 1로 만들기

문제

class Solution {
    public int solution(int[] num_list) {
        int answer = 0;
        
        for(int i=0; i<num_list.length; i++){
            while(num_list[i] > 1){
                if(num_list[i] %2 == 1){
                    num_list[i]--;
                }
                num_list[i] /= 2;
                answer++;
            }
        }
        
        return answer;
    }
}

<작성한 코드>

for문을 사용해서 배열의 길이까지 반복시켰다. for문 안에서는 while문을 사용해서 num_list [i]의 값이 1보다 크면 실행되게 하였다. if문으로 홀수면 num_list값에 -1을 해줬고 아래에서 /2를 계속해준다. 이때 answer도 1씩 증가해서 총횟수가 나오게 된다.

 

 

 

153. 조건에 맞게 수열 변환하기 2

문제

import java.util.*;

class Solution {
    public int solution(int[] arr) {
        int answer = 0;
        int cnt = 0;
        int[] arr2 = new int[arr.length];
        
        while(cnt != arr.length){
            cnt = 0;
            arr2 = arr.clone();
            for(int i=0; i<arr.length; i++){
                if(arr[i] >= 50 && arr[i] %2 == 0){
                    arr[i] /= 2;
                } else if(arr[i] < 50 && arr[i] %2 == 1){
                    arr[i] = arr[i] * 2 + 1;   
                }
                if(arr[i] == arr2[i]) cnt++;
            }
            answer++;
        }
        
        return answer-1;
    }
}

<작성한 코드>

arr의 길이를 가진 arr2를 만들어줬다. while문안에서 arr2를 arr와 똑같은 값을 넣어주고 cnt도 0으로 계속 초기화되도록 설정했다. for문에서는 주어진 조건에 따라 /2 또는 *2+1을 해줬고 전부 이 값이 전의 arr2값과 같으면 cnt를 ++ 해주었다. 그 뒤 전체 for문이 끝날 때마다 answer++을 해주고 결괏값은 이전값을 반환해야 하기 때문에 -1을 하고 반환해 주었다.

 

 

 

154. 조건에 맞게 수열 변환하기 1

문제

class Solution {
    public int[] solution(int[] arr) {
        int[] answer = new int[arr.length];
        
        for(int i=0; i<arr.length; i++){
            if(arr[i] >= 50 && arr[i] %2 == 0){
                answer[i] = arr[i] /2;
            } else if(arr[i] < 50 && arr[i] %2 != 0){
                answer[i] = arr[i] *2;
            } else{
                answer[i] = arr[i];
            }
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 문제였다. answer의 길이도 arr와 동일하게 선언해 준 뒤 for문을 통해서 원소의 개수만큼 반복시켰다. 내부에선 if, else if, else를 사용해서 조건에 맞는 값을 answer에 그대로 대입하고 반환해 주었다.

 

 

 

155. 수열과 구간 쿼리 1

문제

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        for(int i=0; i<queries.length; i++){
            int a = queries[i][0];
            int b = queries[i][1];
            
            for(int j=a; j<=b; j++){
                arr[j] += 1;
            }
        }
        
        return arr;
    }
}

<작성한 코드>

2차원배열의 0,1번째의 값을 a, b로 지정해 줬다. 그 뒤 for문으로 arr [j]에 있는 요소들을 1씩 증가시키고 arr를 반환하였다.

 

 

156. n보다 커질 때까지 더하기

문제

class Solution {
    public int solution(int[] numbers, int n) {
        int answer = 0;
        
        for(int i=0; i<numbers.length; i++){
            answer += numbers[i];
            
            if(answer > n){
                break;
            }
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 문제였다. 반복문으로 numbers의 배열을 차례대로 더해주고 if문을 사용해서 answer이 n보다 커지면 for문을 종료하였다.

 

 

 

157. 할 일 목록

문제

import java.util.*;

class Solution {
    public String[] solution(String[] todo_list, boolean[] finished) {
        List<String> list = new ArrayList<>();
        
        for(int i=0; i<todo_list.length; i++){
            if(!finished[i]){
                list.add(todo_list[i]);
            }
        }
        
        String[] answer = new String[list.size()];
        for(int i=0; i<list.size(); i++){
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}

<작성한 코드>

list를 하나 선언했다. 그리고 for문으로 원소의 길이만큼 반복시켜 주고 if문으로 finished [i]에 든 값이 false이면 list에 해당 todo_list [i] 값을 추가해 줬다. 두 번째 for문에서는 list안에 있는 원소들을 String형 배열 answer에 대입해 주고 반환하였다.

.

 

 

158. 5명씩

문제

import java.util.*;

class Solution {
    public String[] solution(String[] names) {
        List<String> list = new ArrayList<>();
        
        for(int i=0; i<names.length; i++){
            if(i%5 == 0){
                list.add(names[i]);
            }
        }
        
        String[] answer = new String[list.size()];
        for(int i=0; i<list.size(); i++){
            answer[i] = list.get(i);
        }
        
        
        return answer;
    }
}

<작성한 코드>
list를 하나 만들어줬다. 그리고 for문으로 names의 길이만큼 반복시켰고 i가 5로 나눴을 때 0이 될 때 즉 0이거나 5의 배수일 때만 list에 그 값을 추가해 줬다. 그 뒤에 answer배열을 선언하고 값을 그대로 대입해 주고 반환하였다.

 

 

 

159. 홀수 vs 짝수

문제

class Solution {
    public int solution(int[] num_list) {
        int answer = 0;
        int sum1 = 0;
        int sum2 = 0;
        
        for(int i=0; i<num_list.length; i++){
            if(i%2 == 0){
                sum1 += num_list[i];
            } else{
                sum2 += num_list[i];
            }
        }
        
        if(sum1 > sum2){
            answer = sum1;
        } else if(sum1 < sum2){
            answer = sum2;
        } else answer = sum1;
        
        
        return answer;
    }
}

<작성한 코드>

간단한 문제였다. 짝수들의 합은 sum1, 홀수들의 합은 sum2에 저장시킨뒤 if문으로 큰 값을 answer에 넣어줬다. 만약 값이 같으면 sum1을 넣어주고 반환하였다.

 

 

 

160. n개 간격의 원소들

문제

import java.util.*;

class Solution {
    public int[] solution(int[] num_list, int n) {    
        List<Integer> list = new ArrayList<>();
        
        for(int i=0; i<num_list.length; i+=n){
            list.add(num_list[i]);
        }
        
        int[] answer = new int[list.size()];
        for(int i=0; i<list.size(); i++){
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 문제다. for문으로 num_list의 길이까지 반복시켰다. i는 n만큼 증가시키면서 list에 추가해 줬다. 그리고 list의 값을 int형 배열 answer에 넣어주고 반환하였다.

 

 

 

161. n번째 원소까지

문제

class Solution {
    public int[] solution(int[] num_list, int n) {
        int[] answer = new int[n];
        
        for(int i=0; i<n; i++){
            answer[i] = num_list[i];
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 문제다. n번째까지 넣어주면 된다. answer의 크기를 n만큼 설정해서 n번만큼 돌려주고 값을 넣어준뒤 반환하였다.

 

반응형
프로필사진

남건욱's 공부기록