Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- IntelliJ
- aws
- 에러
- 알고리즘
- Spring
- db
- kotlin
- Eclipse
- oracle
- 방법
- JPA
- mybatis
- Git
- 시큐리티
- 프로그래머스
- JavaScript
- 코틀린
- 쿼리
- 넥사크로
- 스프링
- 자바
- error
- 생성
- 함수
- Vue
- Java
- 오라클
- GitHub
- Security
- jquery
Archives
- Today
- Total
송민준의 개발노트
[프로그래머스] 키패드 누르기 본문
https://programmers.co.kr/learn/courses/30/lessons/67256?language=java
키패드를 기준으로 어느손을 눌러 주어진 번호를 누를 것인가? 문제이다.
1단계라서 쉽다.
기능별로 쪼개봤다.
public class 키패드누르기 {
private static int[][] phone = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{-1, 0, -1}
};
public String solution(int[] numbers, String hand) {
StringBuilder resultBuilder = new StringBuilder();
int[] leftPosition = {3, 0};
int[] rightPosition = {3, 2};
boolean isLeft = hand.equals("left");
for(int number : numbers) {
int[] numberIndex = findNumberIndex(number);
String useHand = findUseHand(numberIndex, leftPosition, rightPosition, isLeft);
if(useHand.equals("L")) {
leftPosition = numberIndex;
} else {
rightPosition = numberIndex;
}
resultBuilder.append(useHand);
}
return resultBuilder.toString();
}
// 사용할 손 찾기
public String findUseHand(int[] numberIndex, int[] leftPosition, int[] rightPosition, boolean isLeft) {
// 우측이면 오른손
if(numberIndex[1] == 2) {
return "R";
} else if(numberIndex[1] == 0) { // 좌측이면 왼손
return "L";
}
// 중간값이면 계산
int leftMoveCount = Math.abs(numberIndex[0] - leftPosition[0]) + Math.abs(numberIndex[1] - leftPosition[1]);
int rightMoveCount = Math.abs(numberIndex[0] - rightPosition[0]) + Math.abs(numberIndex[1] - rightPosition[1]);
if(leftMoveCount > rightMoveCount) {
return "R";
} else if(leftMoveCount < rightMoveCount) {
return "L";
} else {
return (isLeft) ? "L" : "R";
}
}
// 번호 위치 찾기
public int[] findNumberIndex(int number) {
for(int row = 0; row < phone.length; row++) {
for(int col = 0; col < phone[row].length; col++) {
if(phone[row][col] == number) {
return new int[]{row, col};
}
}
}
return null;
}
}
문제를 풀고 다른 사람 코드를 봤으나
나랑 비슷하거나 가독성이 더 별로여서 참고할게 없었다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 음양 더하기 (0) | 2022.04.24 |
---|---|
[프로그래머스] 없는 숫자 더하기 (0) | 2022.04.18 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2022.04.10 |
[프로그래머스] 신규 아이디 추천 (0) | 2022.04.03 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2021.11.02 |