https://programmers.co.kr/learn/courses/30/lessons/67256
[제한사항]
- numbers 배열의 크기는 1 이상 1,000 이하입니다.
- numbers 배열 원소의 값은 0 이상 9 이하인 정수입니다.
- hand는 "left" 또는 "right" 입니다.
- "left"는 왼손잡이, "right"는 오른손잡이를 의미합니다.
- 왼손 엄지손가락을 사용한 경우는 L, 오른손 엄지손가락을 사용한 경우는 R을 순서대로 이어붙여 문자열 형태로 return 해주세요.
[ 풀이 ]
*은 10, 0은 11, #은 12로 생각했다.
세로로 값차이는 3, 가로로 값 차이는 1
예를 들어 눌러야 할 숫자가 6, 왼손의 위치가 1, 오른손의 위치가 9 라고 두면
8을 누르려면 왼손은 아래로 2번 오른쪽으로 1번, 오른손은 왼쪽으로 1번 움직이면 된다.
난 여기서 아래로 2, 오른쪽으로 1 or 왼쪽으로 1 이 숫자들이 필요했다.
이게 맞는진 모르겠지만 이렇게 했다.
ㅣ 8 (눌러야하는 숫자) - 1 (왼손의 위치)ㅣ = 7
7 / 3 = 2...1 (아래로 2, 오른쪽으로 1)
총 이동 거리: 몫 + 나머지 = 2 + 1 = 3
ㅣ 8 (눌러야하는 숫자) - 9 (오른손의 위치)ㅣ = 1
1 / 3 = 0...1 (왼쪽으로 1 )
총 이동 거리: 몫 + 나머지 = 0 + 1 = 1
- 거리 비교
3 (왼손 이동거리) > 1 (오른손 이동거리)
오른손이 더 가까우므로 오른손이 움직임 -> result.append("R")
- 만일 이동거리가 같을 경우
왼손잡이, 오른손잡이에 따라 결정
1, 4, 7은 왼손 / 3, 6, 9는 오른손
//
// main.swift
// Programmers_카카오인턴_키패드누르기
//
// Created by 임지성 on 2021/09/06.
//
import Foundation
func solution(_ numbers:[Int], _ hand:String) -> String {
enum useHand {
case left
case right
}
// 1...12 까지 세로로는 3차이 가로로는 1차이
// 절댓값 (손의 위치 - 가야할 위치) / 3 의 몫과 나머지를 더하면 이동거리
var result = ""
var leftHand = 10 // * 왼손 초기 시작 지점 or 왼손 위치
var rightHand = 12 // # 오른손 초기 시작 지점 or 오른손 위치
for i in numbers {
let number = i == 0 ? 11 : i
var touchHand: useHand = .left
switch number {
case 1, 4, 7:
touchHand = .left
case 3, 6, 9:
touchHand = .right
case 2, 5, 8, 11:
let leftDiff = (number - leftHand).magnitude
let rightDiff = (number - rightHand).magnitude
let leftDistance = (leftDiff / 3) + (leftDiff % 3)
let rightDistance = (rightDiff / 3) + (rightDiff % 3)
if leftDistance == rightDistance {
touchHand = hand == "left" ? .left : .right
} else {
touchHand = leftDistance < rightDistance ? .left : .right
}
default:
break
}
if touchHand == .left {
result.append("L")
leftHand = number
} else {
result.append("R")
rightHand = number
}
}
return result
}
'Algorithm' 카테고리의 다른 글
[Programmers] 두 개 뽑아서 더하기 (0) | 2021.09.14 |
---|---|
[Programmers] 카카오 크레인 인형 뽑기 게임 (0) | 2021.09.12 |
[프로그래머스] 부족한 금액 계산 (0) | 2021.08.30 |
[Swift] 스위프트 자료구조, 알고리즘 공부하기 좋은 블로그 (0) | 2021.08.24 |
[Baekjoon] 2557: HelloWorld - Swift (0) | 2021.08.12 |
댓글