-
[카카오 인턴] 키패드 누르기코딩 테스트/Level 1 2020. 9. 8. 07:07반응형
키패드 누르기
2020 카카오 인턴십
1974명 완료https://programmers.co.kr/learn/courses/30/lessons/67256
def solution(numbers, hand): answer = [] positions = {1: (0, 3), 4: (0, 2), 7: (0, 1), 2: (1, 3), 5: (1, 2), 8: (1, 1), 0: (1, 0), 3: (2, 3), 6: (2, 2), 9: (2, 1)} left = (0, 0) right = (2, 0) for number in numbers: if number in (1, 4, 7): answer.append('L') left = positions[number] elif number in (3, 6, 9): answer.append('R') right = positions[number] else: left_dist = abs(positions[number][0] - left[0]) + abs(positions[number][1] - left[1]) right_dist = abs(positions[number][0] - right[0]) + abs(positions[number][1] - right[1]) if left_dist < right_dist or (left_dist == right_dist and hand == 'left'): answer.append('L') left = positions[number] else: answer.append('R') right = positions[number] return ''.join(answer)
테스트 1 〉 통과 (0.00ms, 9.54MB) 테스트 2 〉 통과 (0.01ms, 9.44MB) 테스트 3 〉 통과 (0.01ms, 9.58MB) 테스트 4 〉 통과 (0.00ms, 9.66MB) 테스트 5 〉 통과 (0.01ms, 9.55MB) 테스트 6 〉 통과 (0.01ms, 9.39MB) 테스트 7 〉 통과 (0.01ms, 9.52MB) 테스트 8 〉 통과 (0.02ms, 9.49MB) 테스트 9 〉 통과 (0.02ms, 9.68MB) 테스트 10 〉 통과 (0.02ms, 9.53MB) 테스트 11 〉 통과 (0.04ms, 9.55MB) 테스트 12 〉 통과 (0.03ms, 9.55MB) 테스트 13 〉 통과 (0.06ms, 9.56MB) 테스트 14 〉 통과 (0.13ms, 9.55MB) 테스트 15 〉 통과 (0.34ms, 9.45MB) 테스트 16 〉 통과 (0.31ms, 9.6MB) 테스트 17 〉 통과 (0.77ms, 9.68MB) 테스트 18 〉 통과 (0.58ms, 9.73MB) 테스트 19 〉 통과 (0.69ms, 9.5MB) 테스트 20 〉 통과 (0.64ms, 9.65MB)
가독성 좋은 이런 식의 코드를 더 좋아하지만..
def solution(numbers, hand): answer = [] positions = {1: (0, 3), 4: (0, 2), 7: (0, 1), 2: (1, 3), 5: (1, 2), 8: (1, 1), 0: (1, 0), 3: (2, 3), 6: (2, 2), 9: (2, 1)} left = (0, 0) right = (2, 0) for number in numbers: if number in (1, 4, 7): answer.append('L') left = positions[number] elif number in (3, 6, 9): answer.append('R') right = positions[number] else: left_dist = calc_dist(positions[number], left) right_dist = calc_dist(positions[number], right) if left_dist < right_dist or (left_dist == right_dist and hand == 'left'): answer.append('L') left = positions[number] else: answer.append('R') right = positions[number] return ''.join(answer) def calc_dist(a, b): return abs(a[0] - b[0]) + abs(a[1] - b[1])
golang
func solution(numbers []int, hand string) string { temp := make([]rune, len(numbers)) positions := map[int][]int{ 1: []int{0, 3}, 4: []int{0, 2}, 7: []int{0, 1}, 2: []int{1, 3}, 5: []int{1, 2}, 8: []int{1, 1}, 3: []int{2, 3}, 6: []int{2, 2}, 9: []int{2, 1}, 0: []int{1, 0}, } left, right := []int{0, 0}, []int{2, 0} for i, v := range numbers { if v == 1 || v == 4 || v == 7 { temp[i] = 'L' left = positions[v] } else if v == 3 || v == 6 || v == 9 { temp[i] = 'R' right = positions[v] } else { left_dist := calc_dist(positions[v], left) right_dist := calc_dist(positions[v], right) if left_dist < right_dist || (left_dist == right_dist && hand == "left") { temp[i] = 'L' left = positions[v] } else { temp[i] = 'R' right = positions[v] } } } return string(temp) } func calc_dist(a, b []int) int { x := a[0] - b[0] y := a[1] - b[1] if x < 0 { x = -x } if y < 0 { y = -y } return x + y }
Java
class Solution { public String solution(int[] numbers, String hand) { StringBuilder answer = new StringBuilder(); var lastLeft = new int[]{0, 0}; var lastRight = new int[]{2, 0}; var table = new int[][]{{1, 0}, {0, 3}, {1, 3}, {2, 3}, {0, 2}, {1, 2}, {2, 2}, {0, 1}, {1, 1}, {2, 1}}; for (var each : numbers) { if (each == 1 || each == 4 || each == 7) { answer.append('L'); lastLeft = table[each]; } else if (each == 3 || each == 6 || each == 9) { answer.append('R'); lastRight = table[each]; } else { var leftDistance = Math.abs(lastLeft[0] - table[each][0]) + Math.abs(lastLeft[1] - table[each][1]); var rightDistance = Math.abs(lastRight[0] - table[each][0]) + Math.abs(lastRight[1] - table[each][1]); if (leftDistance > rightDistance) { answer.append('R'); lastRight = table[each]; } else if (leftDistance < rightDistance) { answer.append('L'); lastLeft = table[each]; } else { if (hand.equals("right")) { answer.append('R'); lastRight = table[each]; } else { answer.append('L'); lastLeft = table[each]; } } } } return answer.toString(); } }
반응형