728x90

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

[3์ฐจ] ๋ฐฉ๊ธˆ๊ทธ๊ณก

 

๐Ÿ”Ž ๋ฌธ์ œ ํ’€์ด

๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๋น„๊ต๋ฅผ ๋ฌป๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

์žฌ์ƒ ์‹œ๊ฐ„์ด ์Œ์•… ๊ธธ์ด๋ณด๋‹ค ๊ธด ๊ฒฝ์šฐ๋Š” ์Œ์•…์ด ๋Š๊น€ ์—†์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐ˜๋ณตํ•ด์„œ ์žฌ์ƒ๋˜๊ณ ,

์žฌ์ƒ ์‹œ๊ฐ„์ด ์Œ์•… ๊ธธ์ด๋ณด๋‹ค ์งง์€ ๊ฒฝ์šฐ๋Š” ์Œ์•…์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ์žฌ์ƒ ์‹œ๊ฐ„๋งŒํผ๋งŒ ์žฌ์ƒ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์žฌ์ƒ ์‹œ๊ฐ„๊ณผ ์Œ์•… ๊ธธ์ด๋ฅผ ๊ตฌํ•ด ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์œผ๋กœ ๋‚˜๋ˆ„์–ด ์‹ค์ œ ์žฌ์ƒ๋˜๋Š” ์•…๋ณด๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

 

1) ์žฌ์ƒ ์‹œ๊ฐ„ > ์Œ์•… ๊ธธ์ด

์‹ค์ œ ์žฌ์ƒ๋˜๋Š” ์•…๋ณด๋Š” "์žฌ์ƒ ์‹œ๊ฐ„ / ์Œ์•… ๊ธธ์ด" ๋งŒํผ ์•…๋ณด๋ฅผ ๋ฐ˜๋ณตํ•œ ํ›„, ๋‚˜๋จธ์ง€ "์žฌ์ƒ ์‹œ๊ฐ„ % ์Œ์•… ๊ธธ์ด " ๋งŒํผ ๋’ค์— ๋ง๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

 

2) ์žฌ์ƒ ์‹œ๊ฐ„ <= ์Œ์•… ๊ธธ์ด

์‹ค์ œ ์žฌ์ƒ๋˜๋Š” ์•…๋ณด๋Š” ์žฌ์ƒ ์‹œ๊ฐ„๋งŒํผ๋งŒ ์•…๋ณด๋ฅผ ์ž˜๋ผ์ฃผ๋ฉด ๋œ๋‹ค.

 

์—ฌ๊ธฐ๊นŒ์ง€ ํ’€๋‹ค๊ฐ€ #์ด ๋ถ™์€ ์Œ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ๊ณ ๋ฏผํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๋ง‰ํ˜”๋‹ค.

C#์€  ๋‘ ๊ธ€์ž์ด์ง€๋งŒ ์‚ฌ์‹ค ํ•˜๋‚˜์˜ ์Œ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Kakao Tech ๋ธ”๋กœ๊ทธ ๋ฌธ์ œ ํ•ด์„ค์—์„œ๋Š” ๋ฌธ์ž์—ด ๋น„๊ต์—์„œ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•˜๋ผ๊ณ  ์•Œ๋ ค์ค€๋‹ค.

 

1) ํ† ํฐํ™”(Tokenizing)๋ฅผ ํ†ตํ•ด ["A", "B" "C#"] ์‹์˜ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ๋น„๊ตํ•œ๋‹ค.
2) ๋‘ ๊ธ€์ž๋กœ ๋œ "C#", "D#", "F#" ๋“ฑ์„ ์•…๋ณด์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž "c", "d", "e" ๋“ฑ์œผ๋กœ ์น˜ํ™˜(Substitution)ํ•œ ํ›„ ๋ฌธ์ž์—ด ๋น„๊ต ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค.

 

๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์น˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๋” ํŽธํ•  ๊ฒƒ ๊ฐ™์•„์„œ #์ด ๋ถ™์€ ์Œ์„ ์น˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹ค์ œ ์žฌ์ƒ๋˜๋Š” ์•…๋ณด ์ค‘ ๋„ค์˜ค๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ๋ฉœ๋กœ๋””์ธ ๋ฌธ์ž์—ด m์„ ํฌํ•จํ•˜๋Š” ์•…๋ณด์˜ ์Œ์•… ์ œ๋ชฉ์„ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ๋†“์น˜๋ฉด ์•ˆ๋˜๋Š” ์ ์ด ์žˆ๋‹ค. ๋งŒ์•ฝ ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š” ์Œ์•…์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ๋Š” ์ œ์ผ ์žฌ์ƒ ์‹œ๊ฐ„์ด ๊ธด ์Œ์•…์„ ์ฐพ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜ maxPlayingTime์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š” ์Œ์•… ์ค‘ ์ œ์ผ ๊ธด ์žฌ์ƒ ์‹œ๊ฐ„์„ ์—…๋ฐ์ดํŠธํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

 

์ด๋ ‡๊ฒŒ ํ’€๊ณ  ์ฑ„์ ํ•˜๋‹ˆ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ช‡ ๊ฐœ๊ฐ€ ์‹คํŒจ๋ผ๊ณ  ๋– ์„œ ํ—ค๋งธ๋Š”๋ฐ, ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š” ์Œ์•…์ด ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์ด ์›์ธ์ด์—ˆ๋‹ค.

์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š” ์Œ์•…์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” "(None)"์„ ๋ฆฌํ„ดํ•œ๋‹ค๋Š” ์ ์„ ํฌํ•จํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์ „๋ถ€ ํ†ต๊ณผ๋œ๋‹ค.

 

Key Point

๐Ÿ”‘ ์žฌ์ƒ ์‹œ๊ฐ„ > ์Œ์•… ๊ธธ์ด์ธ ๊ฒฝ์šฐ, ์žฌ์ƒ ์‹œ๊ฐ„ <= ์Œ์•… ๊ธธ์ด์ธ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

๐Ÿ”‘ #์ด ๋ถ™์€ ์Œ์„ ์น˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.

๐Ÿ”‘ ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š” ์Œ์•…์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ์™€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค.

 

Java ์ฝ”๋“œ

import java.util.*;

class Solution {
    public String solution(String m, String[] musicinfos) {
        int maxPlayingTime = 0;
        String answer = "";
        
        // ๋„ค์˜ค๊ฐ€ ๊ธฐ์–ตํ•œ ๋ฉœ๋กœ๋””๋ฅผ ์น˜ํ™˜ํ•œ๋‹ค.
        
        m = changeCode(m);
        
        for (String musicInfo : musicinfos) { 
        	String[] info = musicInfo.split(",");

        	// ์žฌ์ƒ๋œ ์‹œ๊ฐ„ ๊ตฌํ•˜๊ธฐ
            
        	int playingTime = (Integer.parseInt(info[1].substring(0, 2)) 
            				- Integer.parseInt(info[0].substring(0, 2)))*60  
        				+ Integer.parseInt(info[1].substring(3)) 
                    			- Integer.parseInt(info[0].substring(3));
        	
        	// ์•…๋ณด ์ •๋ณด(=info[3]) #์ด ๋ถ™์€ ์Œ ์น˜ํ™˜ํ•˜๊ธฐ
        	
        	info[3] = changeCode(info[3]);
        	
        	// ์Œ์•… ๊ธธ์ด ๊ตฌํ•˜๊ธฐ
        	
        	int musicLength = info[3].length();
        	
        	// ์‹ค์ œ ์žฌ์ƒ๋œ ์Œ์•… ์•…๋ณด ๊ตฌํ•˜๊ธฐ
        	
        	String musicCode = "";
        	
        	// ์žฌ์ƒ ์‹œ๊ฐ„ > ์Œ์•… ๊ธธ์ด : ์ฒ˜์Œ๋ถ€ํ„ฐ ์Œ์•… ๋ฐ˜๋ณต ์žฌ์ƒ
        	
        	if (playingTime > musicLength) {
        		for (int j=0; j<playingTime/musicLength; j++) {musicCode += info[3];}
        		musicCode += info[3].substring(0, playingTime%musicLength);
        	}
        	
        	// ์žฌ์ƒ ์‹œ๊ฐ„ <= ์Œ์•… ๊ธธ์ด : ์ฒ˜์Œ๋ถ€ํ„ฐ ์žฌ์ƒ๋œ ์‹œ๊ฐ„๋งŒํผ ์žฌ์ƒ
        	
        	else {musicCode += info[3].substring(0, playingTime);}
        	
            	// answer = ๋„ค์˜ค๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ๋ฉœ๋กœ๋””๋ฅผ ํฌํ•จํ•˜๋ฉด์„œ 
            	// ์ œ์ผ ์žฌ์ƒ ์‹œ๊ฐ„์ด ๊ธด ์Œ์•… ์ œ๋ชฉ(=info[2])
            
        	if (musicCode.contains(m) && playingTime > maxPlayingTime) {
        		answer = info[2];
        		maxPlayingTime = playingTime;
        	}
        	
        }	
        
        // ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š” ์Œ์•…์ด ์—†๋Š” ๊ฒฝ์šฐ answer = (None)
        
        if (maxPlayingTime == 0) { answer = "(None)"; }
        
        return answer;
    }
    
    // #์ด ๋ถ™์€ ์Œ์„ ์น˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
    
    public static String changeCode(String code) {
        code = code.replaceAll("C#", "c");
        code = code.replaceAll("D#", "d");
        code = code.replaceAll("F#", "f");
        code = code.replaceAll("G#", "g");
        code = code.replaceAll("A#", "a");
        
        return code;
    }
}

728x90

+ Recent posts