programmers 기초 Day20

Hwani·2024년 6월 20일

프로그래머스 DAY 1~25

목록 보기
46/51

문제 - 배열의 길이를 2의 거듭제곱으로 만들기

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        int length = arr.length;
        boolean isPowerOfTwo = (length > 0) && ((length & (length - 1)) == 0);

        while (!isPowerOfTwo) {
            arr = Arrays.copyOf(arr, length + 1);
            arr[length] = 0;
            length = arr.length;
            isPowerOfTwo = (length & (length - 1)) == 0;
        }

        return arr;
    }
}

설명

매개변수 배열의 길이가 2의 거듭제곱이 될 때까지 0을 추가하는 문제

  • isPowerOfTwo의 식은 2의 거듭제곱인지 확인하는 식
  • while문으로 거듭제곱이 될 때까지 안에 함수를 실행시킨다.
  • arr에 기존 배열 arr을 길이 +1로 복사한다.
  • arr[length] = 0 으로 마지막은 0을 넣는다.
  • arr의 length를 다시 저장하고 isPowerOfTwo로 거듭제곱인지 확인한다.
  • 확인 후 맞다면 while문을 빠져나와 arr을 리턴한다.

문제 - 배열 비교하기

풀이

class Solution {
    public int solution(int[] arr1, int[] arr2) {
        int sum1 = 0; // arr1의 원소들의 합을 저장할 변수
        int sum2 = 0; // arr2의 원소들의 합을 저장할 변수
        
        // arr1의 원소들의 합 계산
        for (int num : arr1) {
            sum1 += num;
        }
        
        // arr2의 원소들의 합 계산
        for (int num : arr2) {
            sum2 += num;
        }
        
        // 대소관계 비교
        if (arr1.length > arr2.length || (arr1.length == arr2.length && sum1 > sum2)) {
            return 1;
        } else if (arr1.length < arr2.length || (arr1.length == arr2.length && sum1 < sum2)) {
            return -1;
        } else {
            return 0;
        }
    }
}

조건
매개 변수 2개의 배열이 주어졌을 때,
2개의 배열이 길이가 다른 경우, 길이를 비교

  • arr2 > arr1, return -1
  • arr1 > arr2, return 1
    2개의 배열의 길이가 같은 경우, 원소의 합을 비교
  • arr1 합 > arr2 합, return 1
  • arr2 합 > arr1 합, return -1
  • arr1 합 == arr2 합, return 0

설명

  • 배열의 합을 저장할 변수를 생성
  • 배열의 합을 계산
  • 각 조건에 맞게 식을 만들고 알맞은 리턴값을 리턴한다.

문제 - 문자열 묶기

풀이

import java.util.*;

class Solution {
    public int solution(String[] strArr) {
        Map<Integer, Integer> groupCounts = new HashMap<>(); // 각 그룹의 개수를 저장할 맵
        
        // 문자열 배열의 원소들을 그룹으로 묶고, 그룹별 개수를 계산
        for (String str : strArr) {
            int length = str.length();
            groupCounts.put(length, groupCounts.getOrDefault(length, 0) + 1);
        }
        
        int maxCount = 0; // 가장 개수가 많은 그룹의 크기
        
        // 가장 개수가 많은 그룹의 크기 찾기
        for (int count : groupCounts.values()) {
            if (count > maxCount) {
                maxCount = count;
            }
        }
        
        return maxCount;
    }
}

설명

문자열 배열 strArr의 원소들을 길이별로 그룹화하고 가장 많은 문자열을 포함한 그룹의 크기를 구하는 문제

  • 각 문자열의 길이를 Key로 하고 해당 길이의 문자열 개수를 Value로 저장하는 HashMap을 생성한다.
  • for문으로 문자열의 개수를 HashMap에 저장한다.
  • HashMap을 순회하며 가장 큰 값을 찾고 그 값을 리턴한다.

문제 - 배열의 길이에 따라 다른 연산하기

풀이

class Solution {
    public int[] solution(int[] arr, int n) {
        int[] answer = new int[arr.length];

        for (int i = 0; i < arr.length; i++) {
            if (arr.length % 2 != 0) {  // 배열의 길이가 홀수인 경우
                if (i % 2 == 0) {  // 짝수 인덱스에 n 더하기
                    answer[i] = arr[i] + n;
                } else {
                    answer[i] = arr[i];
                }
            } else {  // 배열의 길이가 짝수인 경우
                if (i % 2 != 0) {  // 홀수 인덱스에 n 더하기
                    answer[i] = arr[i] + n;
                } else {
                    answer[i] = arr[i];
                }
            }
        }

        return answer;
    }
}

조건
arr의 길이가 홀수인 경우

  • 짝수 인덱스에 n을 더하기

arr의 길이가 짝수인 경우

  • 홀수 인덱스에 n을 더하기

설명

  • 리턴할 배열을 arr의 길이만큼 설정하고 배열 생성
  • for문으로 arr의 길이만큼 순회하며 if문으로 각각 조건에 맞는 식 생성 후 값을 리턴

문제 - 뒤에서 5등까지

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] num_list) {
        ArrayList<Integer> list = new ArrayList<>();
        Arrays.sort(num_list);
		
        // num_list의 인덱스번호 0~4까지 list에 추가
        for (int i = 0; i <= 4; i++) {
            list.add(num_list[i]);
        }
		
        // list에 담긴 값 배열에 담고 리턴
        int[] answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}

설명

  • ArrayList 생성
  • 매개변수 배열을 정렬
  • for문으로 인덱스번호 기준 0~4까지(가장 작은 5개의 수) ArrayList에 저장
  • ArrayList에 담긴 값을 배열에 추가 후 리턴
profile
개발자될거야

0개의 댓글