-
[코딩 테스트 합격자 되기] 구현 문제 (좌표)알고리즘/코딩테스트 문제 정리 2024. 12. 30. 23:22
참고: 코딩 테스트 합격자 되기: 파이썬 편 122p
☄️ 문제 접근 및 내 생각
1. 구현 부분에서 어떻게 방법을 떠올릴지 감이 전혀 오지 않아서 문제 분석을 보면서 이해하고 풀어보고자 함
2. 중복이 없는 것에 대한 문제를 풀 때는 조건을 직접 구현하는 것보다도 set()을 떠올려서 될지 말지 파악하는 것이 첫번째임
3. 음수 단위로 가게 되면 배열에서 인덱스로 나타낼 수 없으니 중심을 (5, 5)로 옮긴다는데 인덱스가 무슨 상관인지 아직 모르겠음
4. A-B로 이동하는 거랑 B-A로 이동하는 걸 어떻게 하나로 표현할까 생각했는데 여기는 걍 둘 다 집어넣는 걸 보고 좀 더 간단하게 생각하자는 생각을 함
5. 구현 문제에서는 동작을 나눌 수 있는만큼 나누어서 구현하는 것이 편하다.소요시간: 30분
🌈 파이썬 코드
dirs = 'ULURRDLLU' def move_location(x, y, dir): if dir == 'U': x, y = x, y + 1 elif dir == 'D': x, y = x, y - 1 elif dir == 'L': x, y = x - 1, y elif dir == 'R': x, y = x + 1, y return x, y def is_valid_move(x, y): return 0 <= x < 11 and 0 <= y < 11 def solution(dirs): x, y = 5, 5 result = set() for i in dirs: nx, ny = move_location(x, y, i) if not is_valid_move(nx, ny): continue result.add((x, y, nx, ny)) result.add((nx, ny, x, y)) x, y = nx, ny return len(result) // 2 print(solution(dirs))
- x, y의 값을 업데이트 하는 과정에서 상당히 편안한 문법임을 느꼈음
- (0, 0)으로 해도 상관없을 것 같음을 느꼈음
🌈 자바스크립트 코드
const dirs = "ULURRDLLU"; function valid_move(x, y) { return -5 <= x && x < 5 && -5 <= y && y < 5; } function move_location(x, y, dir) { if (dir == "U") { [x, y] = [x, y + 1]; } else if (dir == "D") { [x, y] = [x, y - 1]; } else if (dir == "L") { [x, y] = [x - 1, y]; } else if (dir == "R") { [x, y] = [x + 1, y]; } return [x, y]; } function solution(dirs) { let position = [0, 0]; const result = new Set(); [...dirs].forEach((dir) => { const [nx, ny] = move_location(...position, dir); if (!valid_move(nx, ny)) { return; } result.add(JSON.stringify([nx, ny, ...position])); result.add(JSON.stringify([...position, nx, ny])); position = [nx, ny]; }); return result.size / 2; } console.log(solution(dirs));
- 일단 valid_move 부분부터 너무 귀찮게 생겼음
- forEach 내부에서는 continue를 사용할 수 없다.
- forEach는 함수 호출 방식으로 반복문을 처리하기 때문에 콜백 함수 내부에서 제어 흐름 키워드인 continue를 사용할 수 없다 그렇기에 return을 통해서 대체할 수 있다.
- result의 길이를 구하는 것은 size임 length가 아님
- set에 값을 넣을 때 배열로 집어넣으면 주소값이 들어가니깐 각자 다르게 됨 그래서 stringfy를 할 것임
'알고리즘 > 코딩테스트 문제 정리' 카테고리의 다른 글
[코딩 테스트 합격자 되기] stack의 심화 (내 기준) (0) 2025.01.08 [코딩 테스트 합격자 되기] 괄호 문제 알고보니 Lv.2 (0) 2025.01.06 [코딩 테스트 합격자 되기] Stack 활용 (1) 2024.12.31 [코딩 테스트 합격자 되기] 행렬의 곱셈, lamdba 활용 (0) 2024.12.30 [코딩 테스트 합격자 되기]이중반복문, while문, enumerate() 활용 (0) 2024.12.29