정답률이 높은 비교적 쉬운 문제이지만, 풀이과정보다 개인적으로 궁금했던
if문과 삼항연산자의 속도 차이, 기존 배열 읽기와 별도 변수 선언의 속도 차이를 테스트해본 결과를 공유하고자 한다.
(안 궁금하셨다면 그래도 백해주시면 됩니당..)
❓ 문제: 점의 위치 구하기
// 문제 설명
사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.
1. x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
2. x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
3. x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
4. x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.
5. x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다.
좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.
// 제한사항
1. dot의 길이 = 2
2. dot[0]은 x좌표를, dot[1]은 y좌표를 나타냅니다
3. -500 ≤ dot의 원소 ≤ 500
4. dot의 원소는 0이 아닙니다.
📝 문제 풀이
조건문 중 if문이 바로 떠올랐지만, 조금 더 간결하고 보기 편한 삼항연산자로 풀기로 했다.
// 나의 풀이
function solution(dot) {
let answer = 0;
dot[0] > 0 && dot[1] > 0 ? answer = 1: null;
dot[0] < 0 && dot[1] > 0 ? answer = 2: null;
dot[0] < 0 && dot[1] < 0 ? answer = 3: null;
dot[0] > 0 && dot[1] < 0 ? answer = 4: null;
return answer;
}
3번째 항에서 맨 마지막에만 null을 넣는게 보기엔 예쁠 수 있지만
모두 null을 넣어주는 게 속도가 더 빨랐다 (이번에 테스트해보고 처음 알게됐다)
더 좋은 방법이 분명 있을테니 다른 분들을 코드를 살펴봤다
// 너무 놀라웠던 어떤 분의 풀이
function solution(dot) {
const [num,num2] = dot;
const check = num * num2 > 0;
return num > 0 ? (check ? 1 : 4) : (check ? 3 : 2);
}
왔더.... 고급스러움이 묻어나온다.... 수학적 사고력을 기르자....
🔍 더 파고들기
위 코드에서 구조 분해 할당한 걸 보고
1. 구조 분해 할당과 필요할 때마다 기존 배열을 읽어들이는 것의 속도차이와
2. 삼항연산자와 if문의 속도차이가 궁금해져 테스트해보기로 했다
결과는 기존 배열을 찾아서 읽는 게 근소하지만 더 빨랐다.
개인적으로 별도 변수를 만들고 사용하는 게
필요할 때마다 기존 배열을 찾아서 읽는 것보다 빠를거라고 생각했는데 예상 외의 결과가 나와서 놀랐다.
아니면 배열의 길이가 워낙 짧아서 변수를 따로 만드는게 메모리를 차지하는 차이인걸까..?
(만약 고수분이 지나가시면 댓글로 알려주시면 감사하겠읍니다🙇)
삼항연산자와 if문은 비슷하거나 if문이 더 빠를 줄 알았는데 웬걸,
삼항연산자가 대체적으로 조금 빨랐다.
나중에 추가된 문법이라 더 많은 연산을 필요로 할 것 같았는데 생각보다 빠르다니...
아마 이름 그대로 연산자여서 빠른 것 같긴 한데 왜 그런지는 궁금하니 더 알아봐야겠다
앞으로 짧은 조건문이 필요할 땐 삼항연산자를 마음편히 써도 될 듯 하다 :-)
현재 랭킹 40,809위...가즈아!
'코딩 생활 > 코딩테스트' 카테고리의 다른 글
[프로그래머스 | JS] 레벨 0. 원소들의 곱과 합 (0) | 2023.04.24 |
---|---|
[프로그래머스 | JS] 레벨 1. 예산 (feat. 내부적인 오류....) (0) | 2023.04.14 |
[프로그래머스 | JS] 레벨 0. 특이한 정렬 (feat. sort()) (0) | 2023.04.14 |
[프로그래머스 | JS] 레벨 0. 중복된 문자 제거 (feat. Set 객체) (0) | 2023.04.12 |
[프로그래머스 | JS] 레벨 0. 세균증식 (feat. 비트 연산자) (0) | 2023.03.10 |
댓글