
곡은 14분 동안 반복된다고 생각한다. 지금 곡은 7분짜리여서 2번더 돌수 있다.
이 2번 돈 곡중에 m 이 포함되어있나 아닌가를 확인하는 문제이다.
function solution(m, musicinfos) {
var answer = '';
var count_max=0;
var name_count=''
const hey_shap= function(go_string){
var return_Ar=[];
for(var ig=0; ig<go_string.length; ig++){
if(go_string[ig]=='#'){
return_Ar.push(return_Ar.pop()+'#');
}
else{
return_Ar.push(go_string[ig]);
}
}
return return_Ar;
}
m=hey_shap(m);
for(var i=0; i<musicinfos.length; i++){
var [fisrt,end,name,music]=musicinfos[i].split(',');
var point=0;
var [first_time,first_second]=fisrt.split(':');
var [second_time,second_second]=end.split(':');
var remain= (
(parseInt(second_time*60) +parseInt(second_second))-(parseInt(first_time*60) +parseInt(first_second)))
music=hey_shap(music);
console.log(remain,'time')
if(remain/ music.length >=1){
var origin= music
while(music.length<remain){
music.push(origin[point]);
point++;
if(point==origin.length){
point=0;
}
}
}
if(remain-music.length <1){
music=music.slice(0,remain)
}
console.log(music)
//확인하는거요
var pointer=0;
for(var go_i=0; go_i<music.length; go_i++)
{
if(m[0]==music[go_i]){
if(m.join('')== music.slice(go_i,go_i+m.length).join('')){
if(count_max<music.length){
count_max=music.length;
name_count=name;
}
}
}
}
}
if(name_count==''){
return '(None)'
}
return name_count
}
function solution(m, musicinfos) {
const getMinutes = s => s.substr(0, 2) * 60 + +s.substr(3);
** m = m.replace(/\w#/g, a => a[0].toLowerCase());**
let answer = musicinfos
.map(info => {
info = info.split(',');
let playMinutes = getMinutes(info[1]) - getMinutes(info[0]),
melody = info[3].replace(/\w#/g, a => a[0].toLowerCase());
melody = playMinutes > melody.length
? melody.padEnd(playMinutes, melody)
: melody.substr(0, playMinutes);
return {playMinutes: playMinutes, melody: melody, name: info[2], startTime: getMinutes(info[0])};
})
.filter(info => new RegExp(m).test(info.melody));
if (answer.length) {
if (answer.length > 1) {
answer = answer.filter(v => v.playMinutes >= Math.max(...answer.map(val => val.playMinutes)));
if (answer.length > 1) {
answer = answer.filter(v => v.startTime <= Math.min(...answer.map(val => val.startTime)));
}
}
return answer[0].name;
}
return "(None)";
정규표현식에는 여러가지 메서드가 존재하는데 이번에는 가장단순한 메서드인 test에 대해서 알아보겠습니다.
이 메서드에 문자열을 전달하면 문자열이 정규 표현식의 패턴과 일치하는지 알려주는지 불리언을 반환하는 메서드입니다.
console.log(/abc/.test("abcde));
// 결과 : true
console.log(/abc/.test("abxde));
// 결과 : false
는 정규식을 이용한 풀이가 많았다. 사실상 내가 푼 코드는 드럽고 잘 알고리즘을 모르는 사람처럼 짠것이였다..^^;; 정규식 을 이용해서 효율적으로 풀어보자...
padEnd 함수 사용 == >

new RegExp(m).test(info.melody)) 을 이용해서 하던가

을 이용해서 포함하고 있는지 확인하는 방법도 있다.
좋은 글 감사합니다!