문제를 푸는동안은 반복문 한번 썼다고 기분 좋았지만, 사실 중첩반복인 것 같아서 정말 속상했다,,,
문제 : 할인 행사
XYZ 마트는 일정한 금액을 지불하면 10일 동안 회원 자격을 부여합니다. XYZ 마트에서는 회원을 대상으로 매일 한 가지 제품을 할인하는 행사를 합니다. 할인하는 제품은 하루에 하나씩만 구매할 수 있습니다. 알뜰한 정현이는 자신이 원하는 제품과 수량이 할인하는 날짜와 10일 연속으로 일치할 경우에 맞춰서 회원가입을 하려 합니다.
1 ≤ want의 길이 = number의 길이 ≤ 10
1 ≤ number의 원소 ≤ 10
number[i]는 want[i]의 수량을 의미하며, number의 원소의 합은 10입니다.
10 ≤ discount의 길이 ≤ 100,000
want와 discount의 원소들은 알파벳 소문자로 이루어진 문자열입니다.
1 ≤ want의 원소의 길이, discount의 원소의 길이 ≤ 12
- 일단 하나씩 읽는다.
- 필요한 거면 체크해나간다.
- 10개가 다 만족하면 카운트하고 다시 처음처럼.
- 중간에 틀리면 다시 처음처럼.
진짜 너무나도 못생긴 코드인 것 같다. 가독성도 최악이고,,, 아무리봐도 알고리즘을 더 많이 풀면서 사고를 길러야 될 것 같다는 생각이 들었다.
내가 푼 문제를 다시 보면서 생각을 해봤는데, 10일 이내에 틀린 값이 시작일 → 옳지 않은 물건의 날짜 까지는 다시 확인을 하지 않아도 계속해서 틀린 값으로 인식될 것이 뻔한데, 틀린 물건이 중간에 끼어있다는 것을 알면서도 탐색한 것을 줄인다면 더 효율적인 코드를 짤 수 있지 않을까? 라고 생각이 든다. 다음번에 다시 풀어봐야겠다!
function solution(phone_book) {
let answer = true
phone_book.sort().forEach((e,i)=>{
if( i < phone_book.length - 1 ) {
if( e === phone_book[i + 1].slice(0, e.length) ) {
return answer = false
}
}
})
return answer
}