코딩테스트

[Java] 코딩테스트 4월(with 프로그래머스)

subindev 2026. 4. 13. 08:56

2026/04/13(월)

알고리즘 고득점 kit  > 해시 > 의상

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

 

프로그래머스

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

programmers.co.kr

import java.util.HashMap;

class Solution {
    public int solution(String[][] clothes) {
        
        HashMap<String, Integer> map = new HashMap<>();
        
        for(String[] cloth : clothes)
        {
            String type = cloth[1];
            map.put(type, map.getOrDefault(type,0) + 1);
                        // 없으면 0에서 시작, 있으면 기존 값 +1
        }

        int answer = 1;
        
        // map.keySet() - Map에 있는 모든 Key만 가져옴
        // map.values() - Map에 있는 모든 값만 가져옴
        for (int count : map.values())
        {
            answer *=(count + 1) ;           
        }
        
        return answer - 1;
    }
}

 

 

알고리즘 고득점 kit  > 해시 > 완주하지 못한 선수 

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

 

프로그래머스

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

programmers.co.kr

import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        Map<String,Integer> map = new HashMap<>();
        
        for(String name : participant)
        {
            map.put(name, map.getOrDefault(name,0)+1);
        }

        for(String name : completion)
        {
            map.put(name, map.get(name) - 1);
        }

        for(String key : map.keySet())
        {
            if(map.get(key)!= 0)
            {
                return key;                
            }
        }
        return answer;
    }
}

 

 

 


 

2026/04/14(화)

알고리즘 고득점 kit  > 해시 > 전화번호 목록

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

 

프로그래머스

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

programmers.co.kr

import java.util.Arrays;

class Solution {
    public boolean solution(String[] phone_book) {
            
        Arrays.sort(phone_book);
        
        for(int i=0;i<phone_book.length -1 ;i++)
        {
            if(phone_book[i+1].startsWith(phone_book[i]))
            {
                return false;                   
            }
        }
        
        return true;
    }
}

 

2026/04/15(수)


1. [문자열] 문자 빈도 정렬



import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) {
        
        String input = "banana";
        String answer = "" ;
        
        String[] arr = input.split("");
        
      
        Map<String, Integer> map = new HashMap<>();

        for(int i=0;i<arr.length;i++)
        {
            map.put(arr[i], map.getOrDefault(arr[i],0) + 1);            
        }

        StringBuilder sb = new StringBuilder();
       

        Arrays.sort(arr); 
        String prev=  "";
        for(String s : arr)
        {
            if(!s.equals(prev))
            {
                sb.append(s);
                sb.append(map.get(s));
                prev = s;
            }        
        }

        System.out.println(sb);
    }
}

 

 

2. [그리디] 체육복

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

 

프로그래머스

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

programmers.co.kr

 

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        
        
        int[] clothes = new int[n+1]; // 0번째 안 쓰고 1번 부터 쓰기 위해

        for(int i= 1; i<= n ; i++)
        {
            clothes[i] = 1;        
        }

        for(int l : lost)
        {
            clothes[l]--;        
        }


        for(int r : reserve)
        {
            clothes[r]++;
        }

        for(int i =1; i<= n ;i ++)
        {
            if(clothes[i] == 0)
            {
                if(i-1 >= 1 && clothes[i-1] == 2)
                {
                    clothes[i]++;
                    clothes[i-1]--;
                }            
                else if(i+1 <= n && clothes[i+1] == 2)
                {
                    clothes[i]++;
                    clothes[i+1]--;
                }
            }        
        }
        
        for(int i = 1;i <= n ; i++){

            
            if(clothes[i] >= 1) answer++;
        }
        
        
        
        
        return answer;
    }
}

 

 

3. [해시] 최빈값 구하기

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

 

프로그래머스

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

programmers.co.kr

import java.util.*;

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        
        Map<Integer, Integer> map = new HashMap<>();
        
        for(int i=0;i<array.length;i++)
        {
           map.put(array[i], map.getOrDefault(array[i],0)+1);          
        }
        
        int max = 0;
        
        for(int i : map.keySet())
        {
            max = Math.max(max, map.get(i));
        }

        List<Integer> list = new ArrayList<>();
        for(int i : map.keySet())
        {
            if(map.get(i) == max)                   list.add(i);
        }
        
        if(list.size() > 1)
        {
            return -1;
        }
        return list.get(0);    
    }
}