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 |
Tags
- 프로그래머스
- 생애첫계약
- array
- 취업사실신고
- 네트워크
- 후니의쉽게쓴시스코네트워킹
- 실업급여
- leetcode
- 정보처리기사개정
- 자료구조
- 모여봐요동물의숲
- 코딩테스트
- IT기초
- C++
- 동적계획법
- 캡쳐링
- 막대기자르기
- 부분합알고리즘
- 자취준비
- 알고리즘
- 사회초년생
- 청년내일채움공제
- 전화영어
- 후니의쉽게쓴시스코라우팅
- 정보
- HeadFirstDesignPatterns
- 순열
- 회사폐업
- 실업인정인터넷신청
- 튜터링
Archives
- Today
- Total
따봉도치야 고마워
[프로그래머스] 카카오 인턴 키패드 입력 본문
https://programmers.co.kr/learn/courses/30/lessons/67256
코딩테스트 연습 - 키패드 누르기
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
programmers.co.kr
풀이
가운데 키패드와 거리를 어떻게 재느냐가 문제였는데, 배열 x,y 좌표의 차이로 계산을 했다.
빠르게 찾기 위해 키패드 값을 key로 x, y 값을 계산해서 넣었다
x = 숫자 idx / 3
y = 숫자 idx % 3
위와 같이 계산 시
첫 행에 있는 요소들은 (1,2,3) x 가 0, 두번째 세번째부터 순서대로 증가하고
각 열에 있는 요소는 0 ~ 2 로 반복 된다.
코드
function solution(numbers, hand) {
const keyMap = createKeyMap();
var answer = '';
var hands = {
left: '*',
right: '#'
};
for (const n of numbers) {
if ([1, 4, 7].includes(n)) {
hands.left = n;
answer += 'L';
}
else if ([3, 6, 9].includes(n)) {
hands.right = n;
answer += 'R';
}
else {
const distWithLeft = distance(keyMap, n, hands.left);
const distWithRight = distance(keyMap, n, hands.right)
if (distWithLeft < distWithRight) {
hands.left = n;
answer += 'L';
}
else if (distWithLeft > distWithRight) {
hands.right = n;
answer += 'R';
}
else {
hands[hand] = n;
answer += (hand === 'left') ? 'L' : 'R';
}
}
}
return answer;
}
function createKeyMap() {
const keyNums = [
1, 2, 3,
4, 5, 6,
7, 8, 9,
'*', 0, '#'
];
const keyMap = {};
for (const idx in keyNums) {
const key = keyNums[idx];
const x = Math.floor(idx / 3);
const y = idx % 3; // y is in 0..2;
keyMap[key] = {x, y};
}
return keyMap;
}
function distance(keyMap, n, handValue) {
const N = keyMap[n];
const HAND = keyMap[handValue];
return Math.abs(N.x - HAND.x) + Math.abs(N.y - HAND.y);
}
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[LeetCode] Arrays 101: Max Consecutive Ones (0) | 2022.04.05 |
---|---|
[프로그래머스] 모의고사 (0) | 2021.10.17 |
[프로그래머스] 체육복 (0) | 2021.09.26 |
[프로그래머스] 정수 삼각형 (0) | 2020.09.10 |
[프로그래머스] 멀쩡한 사각형 (0) | 2020.09.09 |
Comments