programmers 기초 Day15

Hwani·2024년 6월 15일

프로그래머스 DAY 1~25

목록 보기
41/51
post-thumbnail

문제 - 조건에 맞게 수열 반환하기 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) { // 50보다 크거나 같은 짝수
                answer[i] = arr[i] / 2;
            } else if (arr[i] < 50 && arr[i] % 2 != 0) { // 50보다 작은 홀수
                answer[i] = arr[i] * 2;
            } else { // 나머지 경우
                answer[i] = arr[i];
            }
        }

        return answer;
    }
}

설명

조건1 : 배열의 각 원소가 50보다 크거나 같다면 2로 나누기
조건2 : 배월의 각 원소가 50보다 작은 홀수라면 2를 곱하기

  • 정답을 리턴 할 배열을 배열의 크기랑 같기 때문에 새로운 배열 생성
  • 조건에 맞게 if문 작성하고 그 값을 새로운 배열에 담아준다.
  • 담긴 배열의 값을 리턴한다.

문제 - 조건에 맞게 수열 반환하기 2

풀이

import java.util.*;

class Solution {
    public int solution(int[] arr) {
        int[] answer = Arrays.copyOf(arr, arr.length);
        int count = 0;

        while (true) {
            
            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 !=0 ) {
                    arr[i] = arr[i] * 2 + 1;
                }
            }
            
            if (Arrays.equals(arr, answer)) {
                break;
            }
            
            answer = Arrays.copyOf(arr, arr.length);
            count++;
        }
        return count;
    }
}

설명

조건1 : 원소가 50 이상이고 짝수인 경우, 원소를 2로 나눈다.
조건2 : 원소가 50 미만이고 홀수인 경우, 원소에 1을 더한 후 2를 곱한다.
이 작업을 하여 가장 작은 값의 배열을 만드는 횟수를 리턴한다.

  • 배열의 값을 복사하여 새로운 배열을 만든다.
  • while문으로 배열이 변하지 않을 때까지 진행한다.
  • for문과 if문으로 조건에 맞게 설정한다.
  • 변환된 배열이 이전 배열과 동일한지 확인한다.
  • 더 이상 변환할 수 없다면 횟수를 리턴한다.

문제 - 1로 만들기

풀이

class Solution {
    public int solution(int[] num_list) {
        int count = 0;

        for (int i = 0; i < num_list.length; i++) {
            while (num_list[i] > 1) {  // 각 숫자가 1보다 클 때만 반복
                if (num_list[i] % 2 == 0) {  // 짝수일 경우
                    num_list[i] /= 2;
                } else {  // 홀수일 경우
                    num_list[i] = (num_list[i] - 1) / 2;
                }
                count++;
            }
        }

        return count;
    }
}

설명

조건1 : 매개변수 정수가 짝수라면 나누기 2
조건2 : 매개변수 정수가 홀수라면 1을 빼고 나누기
결국엔 정수를 1로 만드는 과정까지 몇 번 계산하는 횟수를 구하는 문제

  • while문으로 숫자가 1보다 클 때만 반복하고
  • if문으로 조건에 맞게 설정한다.
  • while문이 몇번 동작하는지 횟수를 리턴한다. (while문의 조건이 1보다 클때 동작하니까 더이상 동작하지 않는다면 그 숫자는 1이기 때문에 그 때 까지의 횟수를 리턴한다.)

문제 - 길이에 따른 연산

풀이

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

설명

조건1 : 배열의 길이가 11 이상이면 배열의 원소 합 구하기
조건2 : 배열의 길이가 10 이하라면 배열의 원소 곱 구하기

  • 조건에 맞는 if문을 설정하고 for문으로 배열의 합과 곱을 구하고 리턴한다.

문제 - 원하는 문자열 찾기

풀이

class Solution {
    public int solution(String myString, String pat) {
        
        // 대소문자 구분하지 않기 위해 모두 소문자로 변환
        String lowerCaseMyString = myString.toLowerCase();
        String lowerCasePat = pat.toLowerCase();
        
        return lowerCaseMyString.contains(lowerCasePat) ? 1 : 0;
        
    }
}

설명

pat이 myString 에 포함을 한다면 1을 리턴, 포함하지 않는다면 0을 리턴하는 문제

  • 문제에서 대소문자 구분하지 않는다고 했으니 매개변수 2문자를 모두 소문자로 만든다.
  • 소문자를 contains를 사용하여 포함하는지 확인 후 리턴
profile
개발자될거야

0개의 댓글