Problem Solving

2253 : 점프 처음에는 갈 수 있는 가지수인줄 알았는데 최소 움직임 횟수였다. 명심할 것 문제 잘 꼼꼼히 읽기 경계값 체크하기기존 코드에서는 2번째 칸을 무조건 이동가능하게 해뒀는데 2번째 칸 역시 작아서 밟지 못할 수 있다. 이 부분에서 문제가 생겨서 계속 오류가 났다. 예제와 같이 6, 11, 16번 칸을 못 밟는 경우 아래와 같다. 1번째 칸에서 한칸만 이동 가능하다. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 0 1 2 3 4 5 6 7 2번째 칸에서는 1의 속도로 점프했으므로 다시 1의 속도로 점프하거나, 가속해서 2의 속도로 점프할 수 있다. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 0 1..
톱니바퀴를 회전시킬 때는 방향과 회전시킬 톱니바퀴를 선택한다. 톱니바퀴와 맞닿은 다른 톱니바퀴의 극이 서로 다르다면 → 맞닿은 톱니바퀴는 해당 톱니바퀴의 반대방향으로 회전 모든 회전이 끝나면 12시방향이 S극이면 + 2^(N - 1) 점 3번 톱니바퀴는 맞닿아있는 4번 톱니바퀴와 극이 다르다. 1회전 시 3번 톱니바퀴는 반시계, 4번 톱니바퀴가 시계방향으로 움직인다. 이제 1번 바퀴를 시계 방향으로 움직인다. 2번 바퀴와 극이 다르므로 2번은 반시계방향으로 움직인다. 1,2,3번 바퀴가 12시방향에 S극이다. 따라서, 1 + 2 + 4 = 7점 K가 100으로 매우 작음 오른쪽 바퀴 회전 여부 → 현재 바퀴[2]와 다음 바퀴[6]이 서로 다른지 확인 왼쪽 바퀴 회전 여부 → 현재 바퀴[6]과 다음 바퀴[..
알아야 할 것 비트연산자 - 다른 프로그래밍 언어에서 사용하는 방식과 같다. - 추가적으로 `b'10001'` 과 같이 `b`를 붙여 2진수 형태의 문자열을 비트연산할 수 있다. - `b'1001' & b'001' = 1`CASE WHEN 문법 `if - else if - else`방식으로 사용할 수도, `switch - case`방식으로 작성할 수도 있다.if - else if - else방식 CASE WHEN (조건1) THEN (조건에 맞을 경우 대입할 값1) WHEN (조건2) THEN (조건에 맞을 경우 대입할 값2) ELSE (위 조건 모두에 해당하지 않을 경우 대입할 값3) END 기본 적으로 위와 같이 사용한다. 조건에는 서브 쿼리가 올 수도 있다..
코딩테스트 연습 - 전화번호 목록 이 문제는 길이에 따라 정렬한 뒤, 그 길이보다 짧은 번호들을 모두 확인해보는 것이 핵심이다. 나는 Set[]을 사용했는데, Set의 contains를 사용할 경우 O(1)의 시간으로 찾을 수 있기 때문이다. 따라서, 길이를 len이라고 뒀을 때, O(len)의 시간으로 해당 전화번호의 접두사가 있는지 확인할 수 있다. 정렬을 하는 이유는 길이가 긴 번호가 앞에 올 수 있는데, 이 때는 나중에 짧은 번호가 들어왔을 때 다른 번호의 접두사인지 확인할 수 없기 때문이다. 따라서, 반드시 정렬을 먼저해 접두사로 사용될 번호들을 저장해두고 확인해야 한다. 해당 전화번호에 접두사가 있는지 확인하는 로직은 아래와 같다. for(String number : phone_book){ i..
greatwhite
'Problem Solving' 카테고리의 글 목록 (3 Page)