코딩테스트 연습 - 롤케이크 자르기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
첫번째 시도
순차적으로 slice 해서 두 배열을 각자 HashSet로 만든 다음에 개수 비교하는 로직 사용
→ 시간 초과
시간 초과 이유:
topping의 길이가 최대 1,000,000 이기 때문이다.
for 문으로 토핑 배열 전체를 순회하면서 slice, set 으로 중복 걸러내면
시간 복잡도 O(n²)임
두번째 시도:
로직 순서
1. olderBrother → 이름을 가진 Map 객체에 key: 토핑 종류 value: 토핑 개수 저장해줌
2. youngerBrother → Set 객체 선언해줌
3. 전체 배열 순회하면서 하나씩 동생으로 넘겨주기
4. 형아 토핑 개수가 0개면 Map 객체에서 삭제해줌
5. 형아 Map 사이즈 === 동생 Set 사이즈 이면 acc 값 증가
6. count 값 반환 (바로 리턴시켜도 되는데 가독성 위해서 count 저장 후 리턴 시켜줌)
(처음엔 for문 돌리고 for문 스코프 밖에서 let count = 0 으로 선언하고 증가시켜줬는데, reduce로 리팩토링함)
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv.2] 영어 끝말잇기 JavaScript 풀이 (0) | 2022.12.07 |
---|---|
[프로그래머스 Lv 2] 행렬의 곱셈 JavaScript 풀이 (0) | 2022.12.05 |
[프로그래머스 Lv 2] 카펫 JavaScript 풀이 (0) | 2022.12.03 |
[프로그래머스 Lv 2] JadenCase 문자열 만들기 JavaScript 풀이 (0) | 2022.12.02 |
[프로그래머스 Lv 2] 기능개발 JavaScript 풀이 + 리팩토링 시도.. (0) | 2022.12.01 |