일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- animation
- adb connect
- silent printing
- augmentedDevice
- custom printing
- nextjs
- ELECTRON
- camera permission
- ffi-napi
- Recoil
- vercel git lfs
- Can't resolve
- github 100mb
- Failed to compiled
- github pdf
- rolldown
- 이미지 데이터 타입
- camera access
- adb pair
- npm package
- electron-packager
- html
- github lfs
- device in use
- react-native
- 티스토리 성능
- Git
- Each child in a list should have a unique "key" prop.
- dvh
- react-native-dotenv
- Today
- Total
Bleeding edge
[프로그래머스] [3차] 방금그곡 - 자바스크립트 본문
https://programmers.co.kr/learn/courses/30/lessons/17683
코딩테스트 연습 - [3차] 방금그곡
방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,
programmers.co.kr
카카오 문제라 그런지 정렬 문자를 다루는 문제가 나왔다. 개인적으로는, bfs나 dfs와 같은걸 사용하진 않았지만, 차례차례로 논리를 전개하면서 풀었더니, 1트라이에 풀어서 기분이 좋았다.
function solution(m, musicinfos) {
var answer = [];
let listen = convert(m)
for(let i =0; i<musicinfos.length;i++){
let music = musicinfos[i].split(',')
let time = timecal(music[0], music[1])
let playlist = '';
music[3] = convert(music[3])
let length = music[3].length
let zero = 0;
for(let i =0;i<time;i++){
if(zero===length){
zero =0;
}
playlist = playlist +music[3][zero]
zero++;
}
if(playlist.includes(listen)){
answer.push([music[2], time])
}
}
answer = answer.sort((a,b)=> b[1]-a[1]);
return answer.length===0? "(None)" : answer[0][0];
}
function convert(str){
let maker =[[/(C#)/g, 'H'],[/(D#)/g, 'I'],[/(F#)/g, 'J'],[/(G#)/g, 'K'],[/(A#)/g, 'L'] ]
for(let i =0;i<maker.length;i++){
str = str.replace(maker[i][0], maker[i][1])
}
return str
}
function timecal(str1, str2){
let answer = 0;
str1 = str1.split(':')
str2 = str2.split(':')
answer = (Number(str2[0]) - Number(str1[0]))*60 + Number(str2[1]) - Number(str1[1])
return answer
}
문제 풀이 플로우는
1. C# D#과 같은 글자들을 #가 있을 때 따로 분류하는 방법도 있지만 그보다는, 각각 사용되지 않는 알파벳으로 변형을 해서 넣으면 좀 더 편하게 풀 수 있기 때문에 정규식을 사용하여 사용되지 않은 글자로 바꾸는 함수를 넣고, 필요할 때 사용했다.
2. 시간이 00 : 00과 같은 모양으로 나왔기에 두 시간에서 차를 구하고, 앞부분*60 + 뒷부분*1의 합으로 time 구하게 함수를 만들었다.
3. 그 다음에는 시간에 맞게 한글자 한글자를 붙이고, 한바퀴를 다돌았다면, 처음부터 다시시작하게, zero 라는 변수를 둬서 빙빙 돌게 for문을 사용하고, for 문으로 구한 값을 includes를 사용하여 이 곡의 일부가 맞는지 판단한 후, 맞은 곡들을 answer에 push를 했다.(4번을 위해, index 1은 시간으로 넣는다)
4. 문제의 마무리로, playtime이 긴순서를 기준으로 sort를 시킨뒤, answer.length가 0일때 (none)을 출력하게 마무리로 해뒀다.
개인적으로는 너무 재밌게 입력을 바바박 했던 문제였다.