[2021 카카오 코딩테스트] 키패드 누르기 - 자바 java
2022. 1. 21. 05:00ㆍ네카라쿠배 취준반 - 프로그래머스 문제 풀이
0. 자세한 설명은 YouTube 영상으로
1. Class를 활용한 solution
class Solution {
Position left;
Position right;
Position numPos;
public String solution(int[] numbers, String hand) {
String answer = "";
// 1. 왼손 오른손 위치 초기화
left = new Position(3, 0);
right = new Position(3, 2);
for (int num : numbers) {
// 2. 숫자를 누를 손가락 정하기
numPos = new Position((num - 1) / 3, (num - 1) % 3);
if (num == 0)
numPos = new Position(3, 1);
String finger = numPos.getFinger(hand);
// 3. 정해진 손가락을 answer에 담고, 손가락 위치 이동
answer += finger;
if (finger.equals("L"))
left = numPos;
else
right = numPos;
}
return answer;
}
class Position {
int row;
int col;
Position(int row, int col) {
this.row = row;
this.col = col;
}
public String getFinger(String hand) {
String finger = hand.equals("right") ? "R" : "L";
if (this.col == 0) finger = "L";
else if (this.col == 2) finger = "R";
else {
int leftDist = left.getDistance(this);
int rightDist = right.getDistance(this);
if (leftDist < rightDist)
finger = "L";
else if (rightDist < leftDist)
finger = "R";
}
return finger;
}
public int getDistance(Position p) {
return Math.abs(this.row - p.row) + Math.abs(this.col - p.col);
}
}
public static void main(String[] args) {
Solution sol = new Solution();
int[] numbers = { 1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5 };
String hand = "right";
System.out.println(sol.solution(numbers, hand));
}
}
- YouTube 영상에 자세한 내용을 정리했으니 참고하세요.
'네카라쿠배 취준반 - 프로그래머스 문제 풀이' 카테고리의 다른 글
[프로그래머스] 타겟넘버 문제 풀이(DFS BFS 재귀함수 Lv. 2) - java 자바 (0) | 2022.03.30 |
---|---|
[백준 1018] 체스판 다시 칠하기 (완전탐색) - java 자바 (0) | 2022.03.07 |
[2021 카카오 코딩테스트] 순위 검색 - 자바 java (0) | 2021.12.29 |
[2021 카카오 코딩테스트] 메뉴 리뉴얼 - 파이썬 (0) | 2021.12.27 |
[2021 카카오 코딩테스트] 메뉴 리뉴얼 - 자바 java (0) | 2021.12.22 |