처음에는 단순히 for문과 if문을 통해 풀었지만, 좀더 효율적인 방법이 있어 적는다.
일단 비교를 하자면,
1. for문과 if문으로 결과값 도출 __ 약 0.04ms 소요
2. while문과 연산자로 결과값 도출 __ 약 0.03ms 소요
3. 비트연산자 shift 연산자로 결과값 도출 __ 약 0.02ms 소요
2번 방법부터 봐보자.
function solution(n, t) {
while (t-- > 0) n*=2;
return n;
}
- while 문은 괄호 안의 조건이 성립하는 동안에는 계속해서 반복한다.
- a++ 연산자로 a+1 을 할 수 있듯, a-- 연산자로 a-1 을 할 수 있다.
- a+= 연산자로 더하기 할당을 할 수 있듯, a*= 연산자로 곱하기 할당을 할 수 있다.
3번 방법
function solution(n, t) {
return n<<t
}
사실 이 방법 보고 경악했다...
나의 길게 늘어진 코드와 너무 상반되서... 이 연산자에 대해 모르고 있었는데
바로 찾아보기 시작.. ㅎㅎㅎ
자세한건 js 카테고리에 적어둘 예정이다. 일단 간단하게 말하면,
2진수와 관련되어 있고, 10진수 (인간이 사용하는 수)의 정수 10을 2진수로 변환하면 아래와 같다
0 0 0 0 1 0 1 0
이 숫자들을 화살표 방향으로 이동하는데, 해당 연산자 우측에 있는 숫자만큼 이동하라는 말이다.
만약 10<<2 이렇게 쓰여있다면,
0 0 0 0 1 0 1 0 이 수들을 왼쪽으로 두칸씩 이동하라는 말
0 0 1 0 1 0 0 0 결과값은 이렇다.
이걸 다시 10진수로 변환하면, 정수 40이 나온다.
여기에는 규칙이 있다.
n<<t 이 말은 n* (2의 t승) 이라는 말이다.
n*( 2 ^ t)
이 문제의 의도와 아주 딱 맞는 풀이가 아닌가 싶었다..
'코딩테스트' 카테고리의 다른 글
문자열의 끝에 이 문자가 있니? endWith() / substr() (0) | 2023.09.13 |
---|---|
"2개 숫자 모두 배수라면 1을 리턴해주세요" 공배수 문제 or연산자 이용한다구??? (0) | 2023.09.13 |
함수의 파라미터로 받은 문자열을 obj 형식으로 알파벳 당 개수 보이게 만들기. (1) | 2023.09.06 |
var / let / const 확실히 알기 (0) | 2023.06.26 |
perseInt() 함수 / JavaScript에서 입력값 string 타입으로 처리 (0) | 2023.06.26 |