https://programmers.co.kr/learn/courses/30/lessons/17683
내가푼방식
function solution(m, musicinfos) {
var answer=[];
var numb=[];
for(var i=0; i< musicinfos.length; i++){
var b= musicinfos[i].split(",");
var totalmusicplay=0;
var end= (b[1].substr(0,2)/1)*60 +(b[1].substr(3,2)/1);
var start= (b[0].substr(0,2)/1)*60 +(b[0].substr(3,2)/1);
var playinghour = end-start
var hour = 0;
var min =0;
var playingpart='' ;
var leftpart=0;
var playingleftpart='';
hour = Math.floor(playinghour/60);
min = playinghour%60;
totalmusicplay = 60*hour+min
if(b[3].match(/[A-Z]#/gi)!==-1){
b[3] = b[3].replace(/C#/gi, "c");
b[3]= b[3].replace(/D#/gi, "d");
b[3] = b[3].replace(/F#/gi, "f");
b[3] = b[3].replace(/G#/gi, "g");
b[3] = b[3].replace(/A#/gi, "a");
}
if(m.match(/[A-Z]#/gi)!==-1){
m = m.replace(/C#/gi, "c");
m= m.replace(/D#/gi, "d");
m = m.replace(/F#/gi, "f");
m = m.replace(/G#/gi, "g");
m = m.replace(/A#/gi, "a");
}
playingpart = b[3].substr(0,totalmusicplay)
leftpart = totalmusicplay - b[3].length
while(leftpart>0){
playingleftpart=b[3].substr(0,leftpart)
playingpart+=playingleftpart;
leftpart= leftpart-b[3].length;
}
let reg = new RegExp(`${m}`,"g")
console.log(reg)
if(playingpart.match(reg)!==null)
{
answer.push([b[2], totalmusicplay]);
numb.push(totalmusicplay)
}
if(i===musicinfos.length-1){
if(answer.length>1 ){
return answer[numb.indexOf(Math.max(...numb))][0]
} else if(answer.length===1 ) {
return answer[0][0];
}
return "(None)";
}
}
}
접근방법
자바스크립트의 내장함수를 이용하여 배열과 문자열을 정수로 바꿔주는 법을 생각해보았고,
음에 해당하는 #부분을 정규식을 이용하여 소문자 로바꿔주었다. 이는 match 를할시 #까지 포함해서 안읽기때문에 앞에가 다맞으면 #이 있어야 맞는부분도 다 맞다고 된다. 따라서 #이붙은 값은 고유의 값 하나로 묶어야함으로 해당하는 정규식이 #을 가질때 replace로 소문자 하나로 바꾸어주었다.
코드풀이
'공부 > 알고리즘&자료구조' 카테고리의 다른 글
[알고리즘] 자료구조, 배열, linked list (0) | 2022.02.25 |
---|---|
[알고리즘] 알고리즘, 시간복잡도, 공간복잡도, 점근표기법 (0) | 2022.02.25 |
항해99 알고리즘 테스트 2주차 마지막 (0) | 2021.11.13 |
항해99 문제40번풀이 (신규 아이디 추천,프로그래머스, 카카오 blind Recruitment ) (0) | 2021.11.12 |
항해99 문제37번풀이 (소수 만들기 , 프로그래머스) (0) | 2021.11.12 |