01-08 08:57
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[Programmers] ๋ฉ”๋‰ด ๋ฆฌ๋‰ด์–ผ - JAVA (Map / ์ง‘ํ•ฉ) ๋ณธ๋ฌธ

Algorithm/Programmers

[Programmers] ๋ฉ”๋‰ด ๋ฆฌ๋‰ด์–ผ - JAVA (Map / ์ง‘ํ•ฉ)

miinsun 2022. 5. 18. 16:36

2021 KAKAO BLIND RECRUITMENT

 

๐Ÿ’ฌ ๋ฌธ์ œ ์„ค๋ช…

๋ ˆ์Šคํ† ๋ž‘์„ ์šด์˜ํ•˜๋˜ ์Šค์นดํ”ผ๋Š” ์ฝ”๋กœ๋‚˜19๋กœ ์ธํ•œ ๋ถˆ๊ฒฝ๊ธฐ๋ฅผ ๊ทน๋ณตํ•˜๊ณ ์ž ๋ฉ”๋‰ด๋ฅผ ์ƒˆ๋กœ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์—๋Š” ๋‹จํ’ˆ์œผ๋กœ๋งŒ ์ œ๊ณตํ•˜๋˜ ๋ฉ”๋‰ด๋ฅผ ์กฐํ•ฉํ•ด์„œ ์ฝ”์Šค์š”๋ฆฌ ํ˜•ํƒœ๋กœ ์žฌ๊ตฌ์„ฑํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฉ”๋‰ด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์„ ์กฐํ•ฉํ•ด์„œ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ์ข‹์„ ์ง€ ๊ณ ๋ฏผํ•˜๋˜ "์Šค์นดํ”ผ"๋Š” ์ด์ „์— ๊ฐ ์†๋‹˜๋“ค์ด ์ฃผ๋ฌธํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์„ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹จ, ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋Š” ์ตœ์†Œ 2๊ฐ€์ง€ ์ด์ƒ์˜ ๋‹จํ’ˆ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ตœ์†Œ 2๋ช… ์ด์ƒ์˜ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ฃผ๋ฌธ๋œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด ํ›„๋ณด์— ํฌํ•จํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์†๋‹˜ 6๋ช…์ด ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์˜ ์กฐํ•ฉ์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋ฉด,
(๊ฐ ์†๋‹˜์€ ๋‹จํ’ˆ๋ฉ”๋‰ด๋ฅผ 2๊ฐœ ์ด์ƒ ์ฃผ๋ฌธํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ๋‹จํ’ˆ๋ฉ”๋‰ด๋Š” A ~ Z์˜ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค.)
๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธ๋œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ์— ๋”ฐ๋ผ "์Šค์นดํ”ผ"๊ฐ€ ๋งŒ๋“ค๊ฒŒ ๋  ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด ๊ตฌ์„ฑ ํ›„๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ฐ ์†๋‹˜๋“ค์ด ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์ด ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋‹ด๊ธด ๋ฐฐ์—ด orders, "์Šค์นดํ”ผ"๊ฐ€ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ฝ”์Šค์š”๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด course๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ,

"์Šค์นดํ”ผ"๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋  ์ฝ”์Šค์š”๋ฆฌ์˜ ๋ฉ”๋‰ด ๊ตฌ์„ฑ์„ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 

๐Ÿšซ ์ œํ•œ ์‚ฌํ•ญ

  • orders ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 2 ์ด์ƒ 20 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • orders ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋Š” ํฌ๊ธฐ๊ฐ€ 2 ์ด์ƒ 10 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ๊ฐ ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐ ๋ฌธ์ž์—ด์—๋Š” ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์ด ์ค‘๋ณตํ•ด์„œ ๋“ค์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • course ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 1 ์ด์ƒ 10 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    • course ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋Š” 2 ์ด์ƒ 10 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • course ๋ฐฐ์—ด์—๋Š” ๊ฐ™์€ ๊ฐ’์ด ์ค‘๋ณตํ•ด์„œ ๋“ค์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ •๋‹ต์€ ๊ฐ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด์˜ ๊ตฌ์„ฑ์„ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์„œ return ํ•ด์ฃผ์„ธ์š”.
    • ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด ๋˜ํ•œ ์•ŒํŒŒ๋ฒณ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ ๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธ๋œ ๋ฉ”๋‰ด ๊ตฌ์„ฑ์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด, ๋ชจ๋‘ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    • orders์™€ course ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” return ํ•˜๋Š” ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ์ด ๋˜๋„๋ก ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

 

๐Ÿ”จ ์ž…์ถœ๋ ฅ ์˜ˆ

  1. ์ž…์ถœ๋ ฅ ์˜ˆ 1
    •  ๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  2. ์ž…์ถœ๋ ฅ ์˜ˆ 2
    • AD๊ฐ€ ์„ธ ๋ฒˆ, CD๊ฐ€ ์„ธ ๋ฒˆ, ACD๊ฐ€ ๋‘ ๋ฒˆ, ADE๊ฐ€ ๋‘ ๋ฒˆ, XYZ ๊ฐ€ ๋‘ ๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
    • ์š”๋ฆฌ 5๊ฐœ๋ฅผ ์ฃผ๋ฌธํ•œ ์†๋‹˜์ด 1๋ช… ์žˆ์ง€๋งŒ, ์ตœ์†Œ 2๋ช… ์ด์ƒ์˜ ์†๋‹˜์—๊ฒŒ์„œ ์ฃผ๋ฌธ๋œ ๊ตฌ์„ฑ๋งŒ ์ฝ”์Šค์š”๋ฆฌ ํ›„๋ณด์— ๋“ค์–ด๊ฐ€๋ฏ€๋กœ, ์š”๋ฆฌ 5๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ ์ฝ”์Šค์š”๋ฆฌ๋Š” ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. ์ž…์ถœ๋ ฅ ์˜ˆ 3
    1. WX๊ฐ€ ๋‘ ๋ฒˆ, XY๊ฐ€ ๋‘ ๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
    2. 3๋ช…์˜ ์†๋‹˜ ๋ชจ๋‘ ๋‹จํ’ˆ๋ฉ”๋‰ด๋ฅผ 3๊ฐœ์”ฉ ์ฃผ๋ฌธํ–ˆ์ง€๋งŒ, ์ตœ์†Œ 2๋ช… ์ด์ƒ์˜ ์†๋‹˜์—๊ฒŒ์„œ ์ฃผ๋ฌธ๋œ ๊ตฌ์„ฑ๋งŒ ์ฝ”์Šค์š”๋ฆฌ ํ›„๋ณด์— ๋“ค์–ด๊ฐ€๋ฏ€๋กœ, ์š”๋ฆฌ 3๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ ์ฝ”์Šค์š”๋ฆฌ๋Š” ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    3. ๋˜, ๋‹จํ’ˆ๋ฉ”๋‰ด๋ฅผ 4๊ฐœ ์ด์ƒ ์ฃผ๋ฌธํ•œ ์†๋‹˜์€ ์—†์œผ๋ฏ€๋กœ, ์š”๋ฆฌ 4๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ ์ฝ”์Šค์š”๋ฆฌ ๋˜ํ•œ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

โ€‹

๐Ÿ’ป Solution.java

import java.util.*;

public class Main {

	// ๋ฉ”๋‰ด์˜ ์กฐํ•ฉ ๊ตฌํ•˜๊ธฐ
	public void combi(String order, String others, int cnt, HashMap<String, Integer> map) {
		if(cnt == 0) {
			// ์ด๋ฏธ ์žˆ๋Š” ์กฐํ•ฉ์ด๋ฉด + 1, ์ƒˆ๋กœ์šด ์กฐํ•ฉ์ด๋ฉด 1๋กœ ์ง€์ •
			map.put(order, map.getOrDefault(order, 0) + 1);
			return;
		}
		else {
			for(int i = 0; i < others.length(); i++) {
				combi(order + others.charAt(i), others.substring(i + 1), cnt - 1, map);
			}
		}
	}
	
	public String[] solution(String[] orders, int[] course) {	    
	    // ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ธฐ
	    for(int i = 0 ; i < orders.length; i++) {
	    	char[] arr = orders[i].toCharArray();
	    	Arrays.sort(arr);
	    	orders[i] = String.valueOf(arr);
	    }
	    
	    // ์ •๋‹ต์„ ์ €์žฅํ•ด์ค„ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
	    ArrayList<String> result = new ArrayList<>();
	    
	    for(int i : course) {
	    	HashMap <String, Integer> map = new HashMap<>();
	    	
	    	// ์ฝ”์Šค ๊ธธ์ด๋ณ„ ๋ฉ”๋‰ด ์ƒ์„ฑ
	    	for(String order : orders) {
	    		combi("", order, i, map);
	    	}
	    	
	    	// ์ œ์ผ ๋งŽ์ด ์„ ํƒ ๋œ ์ฝ”์Šค ํƒ์ƒ‰
	    	Collection<Integer> orderCnt = map.values();
	    	int max = Collections.max(orderCnt);
	    	
	    	// 1๋ฒˆ ์ด์ƒ ์ฃผ๋ฌธ๋œ ๋ฉ”๋‰ด์ผ๋•Œ๋งŒ ์ง€์ • ๊ฐ€๋Šฅ
	    	if(max > 1) {
	    		for(String key : map.keySet()) {
	    			// ๊ฐ€์žฅ ๋งŽ์ด ์„ ํƒ๋œ ๋ฉ”๋‰ด๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ •๋‹ต๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€
		    		if(map.get(key) == max)
		    			result.add(key);
		    	}
	    	}
	    }
	    
	    // ์ •๋‹ต๋ฆฌ์ŠคํŠธ ์ •๋ ฌ
	    Collections.sort(result);
	    
	    String[] answer = new String[result.size()];
	    for(int i = 0; i < answer.length; i++) {
	    	answer[i] = result.get(i);
	    }
	    
	    return answer;
	}
	    
	public static void main(String[] args) {
		Main main = new Main();
		String[] orders = {"ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"};
		int[] course = {2, 3, 4};
  		System.out.println(main.solution(orders, course));
	}
}




Comments