Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- DP
- python기초
- c언어
- 자료구조
- c언어 제어문
- 운체 1주차
- 5장
- 참고X
- 인스타
- #코린이 #코딩 #할 수 있다
- 1주차(1)
- python기본
- 코테
- git기초
- c언어 기본
- 그리디
- 최단거리
- python자료형
- 인텔리제이
- 데베시 1주차
- Workbench
- git 오류
- 도커
- 스택
- 4장
- git오류
- 코딩테스트
- Git
- 백준
- 파이썬 알고리즘 인터뷰
Archives
- Today
- Total
하루살이 개발자
[프로그래머스] Level1 - 키패드 누르기(Java) 본문
문제
왼손 엄지와 오른손 엄지로 키패드를 누를 때 주어진 규칙을 반영하여 어떤 손가락으로 눌렀는지 return하는 문제.
왼손 엄지와 오른손 엄지 중 눌러야 할 번호가 더 가까운 손가락이 어딘지 판단하는 데 시간 오래걸림.
https://school.programmers.co.kr/learn/courses/30/lessons/67256
코드
class Solution {
public String solution(int[] numbers, String hand) {
//String answer = "";
StringBuilder answer = new StringBuilder();
int leftHand = 10; // 왼손 엄지
int rightHand = 12; // 오른손 엄지
int LD, RD;
for(int temp : numbers){
if(temp == 1 | temp == 4 | temp == 7){
//answer+="L";
answer.append("L");
leftHand = temp; // 현재 왼손 엄지 위치 저장
}
else if(temp == 3 | temp == 6 | temp == 9){
answer.append("R");
rightHand = temp; // 현재 오른손 엄지 위치 저장
}
else{
if(temp == 0){
temp = 11; // 0은 11로 보기
}
LD = (Math.abs(leftHand - temp)) / 3 + (Math.abs(leftHand - temp)) % 3; // 왼손 거리
RD = (Math.abs(rightHand - temp)) / 3 + (Math.abs(rightHand - temp)) % 3; // 오른손 거리
if(LD == RD){ // 거리 같을 경우
if(hand.equals("left")){ // hand == "left"일때 테케 실패함
answer.append("L");
leftHand = temp;
}else{
answer.append("R");
rightHand = temp;
}
}else if(LD < RD){ // 왼손이 더 유리
answer.append("L");
leftHand = temp;
}else{ // 오른손이 더 유리
answer.append("R");
rightHand = temp;
}
}
}
return answer.toString();
}
}
* 주의
// 주의1
String answer = " "; 로 초기화시
answer += "L"; (ok)
answer.append("L"); (no!!) -> StringBuilder answer = new StringBuilder(); 로 선언시 가능
why?
StringBuilder가 String과 가장 다른 점은 '수정 가능'하다는 것이다.
결론!
String a = "a"; // string으로 선언하는경우
a += "b"; // 보통 +로 문자열 더함
StringBuilder a = new StringBuilder(); // StringBuilder로 선언하는 경우
a.append(b); // append로 문자열 더하기
return a.toString(); // return시 .toString()이용
// 문자열 더하는 방법 3가지
a = "a";
b = "b";
1. a.concat(b)
2. a + b
3. a.append("b")
// 주의2
// str.equals() 과 == 의 차이
hand = "right"; 일때
hand == "right" 로 코드를 작성하여 일부 테스트 케이스가 실패했다.
why?
a.equals(b)는 말 그대로 a와 b가 가지는 값이 같은지를 true false로 나타내는 것이고,
a == b는 a의 주소값과 b의 주소값이 같은지를 true false로 나타내는 것이다.
결론!
string은 equals로 비교하자!!
'코딩테스트' 카테고리의 다른 글
[SQL] 리트코드 SQL 문제 모음 (0) | 2023.01.06 |
---|---|
코테를 위한 JAVA 정리 (0) | 2022.10.05 |
[프로그래머스] Level1 - 숫자 문자열과 영단어(Java) (0) | 2022.08.07 |
[프로그래머스] Level1 - 신규아이디 추천(Java) (0) | 2022.08.07 |
[프로그래머스] Level1 - 신고결과 받기(Java) (0) | 2022.08.05 |