일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 재귀
- War Game
- web
- SWiFT
- LoB
- OSI
- 정렬 알고리즘
- 스택
- HTML
- 자료구조
- C
- 시간복잡도
- 파이썬
- PHP
- c언어
- 미로 탐색 알고리즘
- System
- pwnable.kr
- 암호수학
- Stack
- 큐
- 백준
- 파일 시스템
- ftz
- windosws wbcs
- ftz level13
- windosw 문자열
- 두근두근 자료구조
- level13
- Java
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 프로그래머스 2020 카카오 인턴십 > 키패드 누르기 본문
Programming/Algorithm & Data Structure
[Swift] 프로그래머스 2020 카카오 인턴십 > 키패드 누르기
guswlsdk 2022. 7. 7. 09:50반응형
문제풀이
1. 키패드에서는 10(0~9)개의 숫자만 표현하기 때문에 딕셔너리로 숫자마다 좌표를 정의했다.
2. numbers의 각 요소가 1, 4, 7에 해당하는 경우는 왼손이며, 왼손의 현재 위치를 수정하고, 3, 6, 9에 해당하는 경우 오른손이며, 오른손의 현재 위치를 수정한다.
3. numbers의 각 요소가 2, 5, 8 ,0에 해당하는 경우 왼손의 위치와 오른손의 위치를 숫자와의 위치와 비교하여 거리를 구한다. 이 때 거리는 |(x1 - x2)| + |(y1 - y2)|이다.
4. 만약 왼손으로부터의 거리와 오른손으로부터의 거리가 같을 경우 처음에 주어진 hand 매개변수에 따른다.
코드
func solution(_ numbers:[Int], _ hand:String) -> String {
var curL = (1,4)
var curR = (3,4)
let left = [1,4,7]
let right = [3,6,9]
let numDict = [1:(1,1), 2: (2,1), 3: (3,1), 4: (1,2), 5:(2,2), 6:(3,2), 7:(1,3), 8:(2,3), 9: (3,3), 0:(2,4)]
var result = ""
for i in numbers{
if left.contains(i){
curL = numDict[i]!
result += "L"
}else if right.contains(i){
curR = numDict[i]!
result += "R"
}else{
let returnHand = disMin(curL: curL, curR: curR, cur: numDict[i]!)
if returnHand == "L"{
curL = numDict[i]!
result += "L"
}else if returnHand == "R"{
curR = numDict[i]!
result += "R"
}else{
if hand == "left"{
curL = numDict[i]!
result += "L"
}else{
curR = numDict[i]!
result += "R"
}
}
}
}
return result
}
func disMin(curL: (Int, Int), curR: (Int, Int), cur: (Int, Int)) -> String{
let disL = abs(cur.0 - curL.0) + abs(cur.1 - curL.1)
let disR = abs(cur.0 - curR.0) + abs(cur.1 - curR.1)
if disL > disR{
return "R"
}else if disL < disR{
return "L"
}else{
return "="
}
}
반응형
'Programming > Algorithm & Data Structure' 카테고리의 다른 글
[Swift] 프로그래머스 2021 KAKAO BLIND RECRUITMENT > 메뉴 리뉴얼 (0) | 2022.08.09 |
---|---|
[Swift] 프로그래머스 2019 KAKAO BLIND RECRUITMENT > 실패율 (0) | 2022.07.19 |
[Swift] 프로그래머스 2021 카카오 채용연계형 인턴십 > 숫자 문자열과 영단어 (0) | 2022.07.05 |
[Swift] 프로그래머스 2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천 (0) | 2022.07.04 |
[Swift] 프로그래머스 2021 Dev-Matching: 웹 백엔드 개발자(상반기)로또의 최고 순위와 최저 순위 (0) | 2022.06.28 |