코딩테스트 연습 - 카펫 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 로직 설명
1. yellow 의 약수들을 구해준다.
이때 효율적인 연산을 위해서 yellow 의 제곱근의 정수까지만 구해준다. (1~ yellow 끝까지 순회할 필요없다)
→ 추가적으로 설명하자면, 약수가 n * m 인 형태임을 기억하자.
약분을 구하기 위해서 n * m 을 진행할수록 n은 커지고, m 값은 작아짐
예를 들어 설명해보자면
24의 약수를 구할 경우 4² < 24 < 5² 이다.
x * x 제곱근 (x = 4)
→ n > 4 이후로 더 계산한다면 (4, 6) (6, 4) 처럼 중복된 수가 나올 것이다.
따라서 범위를 1 ~ 4까지만 찾아보면 해당 숫자의 전체 약수를 구할 수 있다.
또한 문제 조건에서 가로가 더 기므로, 1번에서 구한 약수 값들은 노란색 격자무늬-세로의 길이다.
2. yellow의 가로 세로의 경우의 수를 알게 되었다면 전체 경우의 수를 순회하면서 brown 의 길이와 같은 경우 가로 세로 길이를 리턴해준다.
살짝 당황했던 부분
처음에 forEach() 로 썼다가 for of 로 바꿈 ()
→ 분명히 forEach 가 for of 의 문법 설탕이라고 봤었는데 왜 forEach에서 왜 리턴이 안되지, 무슨 차이일까 했음
결론: for of 는 리턴문으로 끝낼 수 있는데 forEach는 그냥 다음이 있는지 없는지 확인하는 함수고 리턴이 없음
(스코프 내부에서 throw 문 던지는 상황 외 무조건 끝까지 순회만 하고 리턴 반환 X)
javascript - What does `return` keyword mean inside `forEach` function? - Stack Overflow
새롭게 알게된 중요 개념
forEach 에서는 리턴값 무시됨
다른 사람 풀이 보고 더 생각해보게 된 것
나는 단순 칸 개수로 연산했는데
(격자 무늬 1개가 길이 1이라는 가정 하에) 전체 카펫 넓이 = brown 개수 + yellow 개수 로 계산하는 것이 더 깔끔해보이는 로직이다
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv.2] 영어 끝말잇기 JavaScript 풀이 (0) | 2022.12.07 |
---|---|
[프로그래머스 Lv 2] 행렬의 곱셈 JavaScript 풀이 (0) | 2022.12.05 |
[프로그래머스 Lv 2] JadenCase 문자열 만들기 JavaScript 풀이 (0) | 2022.12.02 |
[프로그래머스 Lv 2] 기능개발 JavaScript 풀이 + 리팩토링 시도.. (0) | 2022.12.01 |
[프로그래머스 Lv2] 롤케이크 자르기 JavaScript 풀이 (0) | 2022.11.28 |