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

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

남건욱 2023. 10. 23. 20:14
반응형
1. 폰켓몬

문제

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        Map<Integer, Integer> map = new HashMap<>();
        int max = nums.length/2;
        
        for(int num : nums){
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        
        int result = map.size();
        
        answer = Math.min(max, result);
        
        return answer;
    }
}

<작성한 코드>

HashMap형식의 map을 만든 뒤 대입해 줬다. 최대수는 nums길이의 절반이니 nums.length/2를 해줬고 foreach문을 사용해서 nums에서 나온 값에 1씩 증가해 줬다. 그 뒤 result에 map의 길이를 넣어주고 answer에는 Math.min을 사용해서 max와 result 중 작은 값을 넣어주고 반환해 줬다.

 

 

 

 

2. 2016년

문제

import java.util.*;

class Solution {
    public String solution(int a, int b) {
        String answer = "";
        String[] days = {"FRI","SAT","SUN","MON","TUE","WED","THU"};
        int[] date = {31,29,31,30,31,30,31,31,30,31,30,31};
        
        int result = 0;
        for(int i=0; i<a-1; i++){
            result += date[i];
        }   
        result += (b-1);
        
        answer = days[result%7];
        
        return answer;
    }
}

<작성한 코드>

금요일부터 시작하기 때문에 days배열에 금요일부터 목요일까지의 순서로 대입했다. 그 뒤 날짜에는 1월부터 12월까지의 마지막일을 넣어줬다. 그 뒤 1월 1일 기준으로 a월 b일까지의 날짜를 계산하기 위해 for문으로 0부터 a-1까지 월에 해당하는 일수를 더해줬다. 그 뒤 일자를 뜻하는 b를 더해줬다. 1일 기준이기 때문에 b-1을 해줘서 더해줬다. 그 뒤 result에서 7로 나눈 나머지값만큼의 위치에 있는 값이 답일 것이기 때문에 days [result%7]을 해줬다. 그 뒤 반환하였다.

 

 

 

3. 가운데 글자 가져오기

문제

class Solution {
    public String solution(String s) {
        String answer = "";
        
        if(s.length()%2 != 0){
            answer += s.charAt(s.length()/2);
        } else{
            answer += s.charAt(s.length()/2 -1);
            answer += s.charAt(s.length()/2);
        }
        
        return answer;
    }
}

<작성한 코드>

s의 길이가 홀수라면 가운데값만 넣어주면 되기 때문에 s의 길이를 2로 나눈 값에 해당하는 번째의 원소를 answer에 추가하였고, 짝수라면 2로 나눈값에 해당하는 번째에 있는 원소와 그전 원소까지 추가해줘야 하기 때문에 s.length()/2 -1과 s.length()/2 번째의 값을 answer에 넣어주고 반환하였다.

 

 

 

4. 같은 숫자는 싫어

문제

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        List<Integer> list = new ArrayList<>(); 
        list.add(arr[0]);
        
        for(int i=1; i<arr.length; i++){
            if(arr[i] != arr[i-1]){
                list.add(arr[i]);
            }
        }
        
        int[] answer = new int[list.size()];
        for(int i=0; i<list.size(); i++){
            answer[i] = list.get(i);
        }

        return answer;
    }
}

<작성한 코드>

list를 만들어주고 arr의 0번째 값을 먼저 넣어줬다. 그 뒤 for문을 통해서 arr의 두 번째 원소부터 마지막 원소까지 더해줬다. 조건은 현재값이 바로 이전의 값과 동일하지 않을 때이다. list의 값이 전부 담겼으면 answer을 list의 길이만큼 선언해 주고 값들을 answer에 넣어주고 반환하였다.

 

 

 

5. 나누어 떨어지는 숫자 배열

문제

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        List<Integer> list = new ArrayList<>();
        
        for(int a : arr){
            if(a%divisor == 0){
                list.add(a);
            }
        }
        
        if(list.size() == 0){
            return new int[]{-1};
        }
        
        Collections.sort(list);
        
        int[] answer = new int[list.size()];
        for(int i=0; i<list.size(); i++){
            answer[i] = list.get(i);
        }
        
        
        return answer;
    }
}

<작성한 코드>

list를 생성한 뒤 foreach문을 사용해서 a가 divisor로 나누었을 때 나머지가 0일 때만 list에 a값을 추가한다. 그 뒤 list의 길이가 0이면 -1을 반환해 준다. 아니라면 Collections.sort를 사용해서 list를 오름차순으로 정렬해 준 뒤 answer의 크기를 list의 크기와 동일하게 선언해 준 뒤 값들을 넣어주고 answer을 반환했다.

 

 

 

6. 두 정수 사이의 합

문제

class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        int max = Math.max(a,b);
        int min = Math.min(a,b);
        
        for(int i=min; i<=max; i++){
            answer += i;
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 문제다. int형 변수 max에는 a, b 중 큰값을 넣어주고 min에는 a, b중 작은 값을 넣어줬다. 그 뒤 작은 값에서 큰 값까지 반복해서 더해주면 answer값이 나온다. 그 뒤 answer을 반환해 준다.

반응형
프로필사진

남건욱's 공부기록