[Programmers] 2020 카카오 인턴십 1번 - 키패드 누르기
[문제 설명] 전화 키패드가 주어진다. 1 2 3 4 5 6 7 8 9 * 0 # 순서대로 누를 번호가 주어질 때, 각 번호를 누르는 손의 순서를 출력 (왼손 : L / 오른손 : R) [조건] 1 왼손 : {1, 4, 7} / 오른손 : {3, 6, 9} 담당 영역이 없는 번호는 가까운 손으로 클릭 [풀이] 특별한 알고리즘이 필요한 문제는 아니다. 이런 유형의 문제일수록 기발한 풀이법이 많아 배울 점이 많다. 나의 경우에는 키패드에서 키패드까지의 거리를 미리 구하였다. 거리를 용이하기 구하기 위해 2가지 방법을 적용하였다. 1) 각 키패드 값 -1 -> 키패드 간의 수직 거리를 계산할 때 3의 몫을 활용하기 위함 (ex. {1, 2, 3} => {0, 1, 2}) 2) 특수 문자 및 0을 {10, 11..
2021. 9. 3.
[Programmers] 2020 카카오 블라인드 채용 7번 - 블록 이동하기
[문제 설명] 2차원 배열 board가 주어진다. 0은 비어있는 칸, 1은 막혀있는 칸이다. 맨 처음 (1,1) (1,2) 에 로봇이 놓여 있을 때, (N, N)까지 이동하는데 소요되는 최소 시간을 구하는 문제. [조건] 5 오른쪽 점을 기준으로 탐색 로봇이 수직으로 놓여있는 경우 -> 아래 점을 기준으로 탐색 ex) (1, 1) (1, 2)의 로봇 -> (1, 2) 점 하나 + 수평 상태 (값 0) (1, 1) (2, 1)의 로봇 -> (2, 1) 점 하나 + 수직 상태 (값 1) 2. 상, 하, 좌, 우의 이동 외에 회전이 가능하다는 것 -> 위에서 저장한 수평/수직 상태 변수에 따른 경우 나누기 수평 상태에서 회전 가능 여부 -> 위 두 칸 && 아래 두 칸이 비어있는지 수직 상태에서 회전 가능 여..
2021. 8. 28.