๐Ÿ“ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์œ ํšจ๊ธฐ๊ฐ„(java)

jaeyunim 2023. 1. 17. 13:28

1๋‹จ๊ณ„๋ผ๋ฉด์„œ ๋„ˆ๋ฌด ์–ด๋ ค์šด ๋ฌธ์ œ์˜€๋‹ค....

๐ŸŒณ๋ฌธ์ œ ์„ค๋ช…

๊ณ ๊ฐ์˜ ์•ฝ๊ด€ ๋™์˜๋ฅผ ์–ป์–ด์„œ ์ˆ˜์ง‘๋œ 1~n๋ฒˆ์œผ๋กœ ๋ถ„๋ฅ˜๋˜๋Š” ๊ฐœ์ธ์ •๋ณด n๊ฐœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žˆ์œผ๋ฉฐ ๊ฐ ์•ฝ๊ด€๋งˆ๋‹ค ๊ฐœ์ธ์ •๋ณด ๋ณด๊ด€ ์œ ํšจ๊ธฐ๊ฐ„์ด ์ •ํ•ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๊ฐ ๊ฐœ์ธ์ •๋ณด๊ฐ€ ์–ด๋–ค ์•ฝ๊ด€์œผ๋กœ ์ˆ˜์ง‘๋๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ง‘๋œ ๊ฐœ์ธ์ •๋ณด๋Š” ์œ ํšจ๊ธฐ๊ฐ„ ์ „๊นŒ์ง€๋งŒ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ํŒŒ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A๋ผ๋Š” ์•ฝ๊ด€์˜ ์œ ํšจ๊ธฐ๊ฐ„์ด 12 ๋‹ฌ์ด๊ณ , 2021๋…„ 1์›” 5์ผ์— ์ˆ˜์ง‘๋œ ๊ฐœ์ธ์ •๋ณด๊ฐ€ A์•ฝ๊ด€์œผ๋กœ ์ˆ˜์ง‘๋˜์—ˆ๋‹ค๋ฉด ํ•ด๋‹น ๊ฐœ์ธ์ •๋ณด๋Š” 2022๋…„ 1์›” 4์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ 2022๋…„ 1์›” 5์ผ๋ถ€ํ„ฐ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์ž…๋‹ˆ๋‹ค.
๋‹น์‹ ์€ ์˜ค๋Š˜ ๋‚ ์งœ๋กœ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด ๋ฒˆํ˜ธ๋“ค์„ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋‹ฌ์€ 28์ผ๊นŒ์ง€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์˜ค๋Š˜ ๋‚ ์งœ๊ฐ€ 2022.05.19์ผ ๋•Œ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

์•ฝ๊ด€ ์ข…๋ฅ˜์œ ํšจ๊ธฐ๊ฐ„

A 6 ๋‹ฌ
B 12 ๋‹ฌ
C 3 ๋‹ฌ

๋ฒˆํ˜ธ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์ผ์ž์•ฝ๊ด€ ์ข…๋ฅ˜

1 2021.05.02 A
2 2021.07.01 B
3 2022.02.19 C
4 2022.02.20 C
  • ์ฒซ ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” A์•ฝ๊ด€์— ์˜ํ•ด 2021๋…„ 11์›” 1์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ์œผ๋ฏ€๋กœ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์ž…๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” B์•ฝ๊ด€์— ์˜ํ•ด 2022๋…„ 6์›” 28์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์•„์ง ๋ณด๊ด€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” C์•ฝ๊ด€์— ์˜ํ•ด 2022๋…„ 5์›” 18์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ์œผ๋ฏ€๋กœ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์ž…๋‹ˆ๋‹ค.
  • ๋„ค ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” C์•ฝ๊ด€์— ์˜ํ•ด 2022๋…„ 5์›” 19์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์•„์ง ๋ณด๊ด€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด ๋ฒˆํ˜ธ๋Š” [1, 3]์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ฌธ์ž์—ด today, ์•ฝ๊ด€์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ ๋‹ด์€ 1์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด terms์™€ ์ˆ˜์ง‘๋œ ๊ฐœ์ธ์ •๋ณด์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ 1์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด privacies๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์˜ ๋ฒˆํ˜ธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ 1์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.


๐ŸŒณ์ œ์•ˆ ์‚ฌํ•ญ

  • today๋Š” "YYYY.MM.DD" ํ˜•ํƒœ๋กœ ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 1 ≤ terms์˜ ๊ธธ์ด ≤ 20
    • terms์˜ ์›์†Œ๋Š” "์•ฝ๊ด€ ์ข…๋ฅ˜ ์œ ํšจ๊ธฐ๊ฐ„" ํ˜•ํƒœ์˜ ์•ฝ๊ด€ ์ข…๋ฅ˜์™€ ์œ ํšจ๊ธฐ๊ฐ„์„ ๊ณต๋ฐฑ ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„ํ•œ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” A~Z์ค‘ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž ํ•˜๋‚˜์ด๋ฉฐ, terms ๋ฐฐ์—ด์—์„œ ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์œ ํšจ๊ธฐ๊ฐ„์€ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ฌ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜์ด๋ฉฐ, 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • 1 ≤ privacies์˜ ๊ธธ์ด ≤ 100
    • privacies[i]๋Š” i+1๋ฒˆ ๊ฐœ์ธ์ •๋ณด์˜ ์ˆ˜์ง‘ ์ผ์ž์™€ ์•ฝ๊ด€ ์ข…๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • privacies์˜ ์›์†Œ๋Š” "๋‚ ์งœ ์•ฝ๊ด€ ์ข…๋ฅ˜" ํ˜•ํƒœ์˜ ๋‚ ์งœ์™€ ์•ฝ๊ด€ ์ข…๋ฅ˜๋ฅผ ๊ณต๋ฐฑ ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„ํ•œ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ๋‚ ์งœ๋Š” "YYYY.MM.DD" ํ˜•ํƒœ์˜ ๊ฐœ์ธ์ •๋ณด๊ฐ€ ์ˆ˜์ง‘๋œ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, today ์ด์ „์˜ ๋‚ ์งœ๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
    • privacies์˜ ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” ํ•ญ์ƒ terms์— ๋‚˜ํƒ€๋‚œ ์•ฝ๊ด€ ์ข…๋ฅ˜๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • today์™€ privacies์— ๋“ฑ์žฅํ•˜๋Š” ๋‚ ์งœ์˜ YYYY๋Š” ์—ฐ๋„, MM์€ ์›”, DD๋Š” ์ผ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ (.) ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • 2000 ≤ YYYY ≤ 2022
    • 1 ≤ MM ≤ 12
    • MM์ด ํ•œ ์ž๋ฆฟ์ˆ˜์ธ ๊ฒฝ์šฐ ์•ž์— 0์ด ๋ถ™์Šต๋‹ˆ๋‹ค.
    • 1 ≤ DD ≤ 28
    • DD๊ฐ€ ํ•œ ์ž๋ฆฟ์ˆ˜์ธ ๊ฒฝ์šฐ ์•ž์— 0์ด ๋ถ™์Šต๋‹ˆ๋‹ค.
  • ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์กด์žฌํ•˜๋Š” ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๐ŸŒณ์ž…์ถœ๋ ฅ ์˜ˆ

today terms privacies result
"2022.05.19" ["A 6", "B 12", "C 3"] ["2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"] [1, 3]
"2020.01.01" ["Z 3", "D 5"] ["2019.01.01 D", "2019.11.15 Z", "2019.08.02 D", "2019.07.01 D", "2018.12.28 Z"] [1, 4, 5]

๐ŸŒณ๋‚˜์˜ ํ’€์ด

๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํžˆ ํ•ด์„ํ•ด๋ณด๋ฉด ํ˜„์žฌ ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์•ฝํ•œ ์•ฝ๊ด€์ค‘ ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚˜ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ์•ฝ๊ด€์„ ์•Œ์•„๋‚ด๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๋‚ด๊ฐ€ ํ–ˆ๋˜ ์ƒ๊ฐ

1. ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ธฐ๊ฐ„์„ ์ผ์ˆ˜๋กœ ๋ณ€๊ฒฝํ•˜์ž.

2. ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ terms์™€ privacies๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์—†์„๊นŒ? (ํ•ด๊ฒฐ ๋ชปํ•จ)

3. ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์ง€์‹์ด ๋ถ€์กฑํ•˜๋‹ค.. ๋ณต์žกํ•˜๋”๋ผ๋„ ๋‚ด ๋ฐฉ์‹์œผ๋กœ ํ’€์–ด๋ณด์ž

3. terms์˜ ์•ฝ๊ด€ ์ข…๋ฅ˜์™€ privacies์˜ ์•ฝ๊ด€ ์ข…๋ฅ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ ์ง€์„ ์ˆ˜ ์žˆ์„๊นŒ?

class Solution {
		public int[] solution(String today, String[] terms, String[] privacies) {
	        //์˜ค๋Š˜ ๋‚ ์งœ ๋ฐ์ดํ„ฐํ™” ํ•˜๊ธฐ
		    String [] getSplitToday = today.split("\\.");
		    int [] intToday = new int[getSplitToday.length];
		        
		    for(int i = 0; i<getSplitToday.length; i++) {
		    	intToday[i] = Integer.parseInt(getSplitToday[i]);
		    }	
		        
		    int todayData = intToday[0] * 28 * 12 + intToday[1] * 28 + intToday[2];
		        
	        int[] answer = new int[privacies.length];
	        
	        
	        //privacies -> ๋‚ ์งœ + ์ข…๋ฅ˜
	        for(int i = 0; i<privacies.length; i++){
	            String[] getPrivacies = privacies[i].split(" ");
	            
	            int num = 0;
	            
	            //๋‚ด๊ฐ€ ๊ณ„์•ฝํ•œ ์•ฝ๊ด€ ์ฐพ๊ณ , num์— ๊ทธ ๊ณ„์•ฝํ•œ ์•ฝ๊ด€์˜ ๊ธฐ๊ฐ„ ์ €์žฅ.
	            for(int j = 0; j<terms.length; j++){
	                String[] getTerms = terms[j].split(" ");
	                
	                if(getPrivacies[1].equals(getTerms[0])){
	                    num = Integer.parseInt(getTerms[1]);
	                    break;
	                }
	            }
	            
	            String[] getSplitPrivacies = getPrivacies[0].split("\\.");
	            
	            int[] intPrivacies = new int[getSplitPrivacies.length];
	            
	            for(int k = 0; k<getSplitPrivacies.length; k++){
	                intPrivacies[k] = Integer.parseInt(getSplitPrivacies[k]);
	            }
	            
	            //๋‹ฌ ๋ถ€๋ถ„์— +num์„ ํ•ด์คŒ์œผ๋กœ์„œ ์ตœ์ข… ๊ธฐ๊ฐ„ ๊ตฌํ•จ.
	            int termData = (intPrivacies[0] * 28 *12) + ((intPrivacies[1] + num) * 28) + (intPrivacies[2]) - 1;
	            
	            //๊ณ„์•ฝ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ์„ ์‹œ
	            if(todayData > termData){
	                answer[i] = i + 1;
	            }
	        }
	        
	        int size = 0;
	        for(int i = 0; i<answer.length; i++){
	            if(answer[i] > 0){
	                size++;
	            }
	        }
	        
	        int[] arr = new int[size];
	        
	        int idx = 0;
	        for(int i = 0; i<answer.length; i++){
	            if(answer[i] > 0){
	                arr[idx] = answer[i];
	                idx ++;
	            }
	        }
	        
	        return arr;
	    }
}

์ด ์„ธ๊ฐ€์ง€๋ฅผ ์ƒ๊ฐ€ํ•˜๋ฉฐ ์•ผ๋งค๋กœ ํ’€์–ด ๋ƒˆ๋˜ ํ’€์ด๋‹ค.

 

ํ•˜์ง€๋งŒ JAVA์— ๋Œ€ํ•œ ์ง€์‹ ๋ถ€์กฑ์œผ๋กœ ์ข€ ๋” ๊ฐ„ํŽธํ•œ ๊ธฐ๋Šฅ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋ฉฐ ํ•ด๊ฒฐ ํ–ˆ๋˜๊ฒŒ ๋А๊ปด์กŒ๋‹ค.

 

์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ’€๋ฉด ๋˜๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ ๊ฑฐ ๊ฐ™์•˜์ง€๋งŒ ์ง€์‹ ๋ถ€์กฑ์œผ๋กœ ํ’€์–ด๋‚˜๊ฐ€์ง€ ๋ชปํ–ˆ๋‹ค.

 

์•„๋‹ˆ๋‚˜ ๋‹ค๋ฅผ๊นŒ ๋‹ค๋ฅธ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ๊นŒ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•œ ํ’€์ด๋ฅผ ๋ณผ ์ˆ˜์žˆ์—ˆ๋‹ค.

 

์ •๋ง ๋‚ด๊ฐ€ ์›ํ–ˆ๋˜ ํ’€์ด ๊ทธ ์žก์ฑ„ ์˜€๋‹ค.


๐ŸŒณ๋ฐฐ์›Œ์•ผ ํ•  ํ’€์ด

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

class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        List<Integer> answer = new ArrayList<>();
        Map<String, Integer> termMap = new HashMap<>();
        int date = getDate(today);

        for (String s : terms) {
            String[] term = s.split(" ");
			//key์™€ value ํ˜•ํƒœ๋กœ terms๋ฅผ termMap์— ์ €์žฅ
            termMap.put(term[0], Integer.parseInt(term[1]));
        }
        for (int i = 0; i < privacies.length; i++) {
            String[] privacy = privacies[i].split(" ");

            if (getDate(privacy[0]) + (termMap.get(privacy[1]) * 28) <= date) {
                answer.add(i + 1);
            }
        }
        return answer.stream().mapToInt(integer -> integer).toArray();
    }

    private int getDate(String today) {
        String[] date = today.split("\\.");
        int year = Integer.parseInt(date[0]);
        int month = Integer.parseInt(date[1]);
        int day = Integer.parseInt(date[2]);
        return (year * 12 * 28) + (month * 28) + day;
    }
}

 

 

๐ŸŒณ๋ฐฐ์›Œ์•ผ ํ•  ์ง€์‹

Map ์ปฌ๋ ‰์…˜์˜ ๊ธฐ๋Šฅ

- put(), get(), remove(), size(), containsKey(), containsValue()

 

List ์ปฌ๋ ‰์…˜์˜ ๊ธฐ๋Šฅ

- stream(), mapToInt()