티스토리 뷰
2020 카카오 인턴십 - LV1
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
func solution7(_ numbers:[Int], _ hand:String) -> String {
let keypad = [[1,2,3],[4,5,6],[7,8,9],[10,0,11]] // 좌표를 위한 배열
var left = 10 // 처음 값 사실 *
var right = 11 // 처음 값 사실 #
var answer = ""
for number in numbers {
if number == 1 || number == 4 || number == 7 { // 기존에 find 함수를 돌렸지만 이중포문이라서
answer += "L" // 간단하게 바꿔줌
left = number
} else if number == 3 || number == 6 || number == 9 {
answer += "R"
right = number
} else { // 해당 숫자가 2,5,8,0 일경우
let middleIndex = findIndex(number: number, keypad: keypad) // 가운데 숫자의 좌표를 구함
let leftIndex = findIndex(number: left, keypad: keypad) // 왼손의 좌표도 구함
let rightIndex = findIndex(number: right, keypad: keypad) // 오른손의 좌표도 구함
let leftToMiddle = abs(leftIndex[0] - middleIndex[0]) + abs(leftIndex[1] - middleIndex[1]) // 좌표들 사이의 거리를 구함 feat. 절대값
let rightToMiddle = abs(rightIndex[0] - middleIndex[0]) + abs(rightIndex[1] - middleIndex[1])
if leftToMiddle < rightToMiddle { // 누가 더 큰 지 비교
answer += "L"
left = number
} else if rightToMiddle < leftToMiddle {
answer += "R"
right = number
} else { // 같을 때는
if hand == "left" { // 왼손잡이면
answer += "L"
left = number
} else {
answer += "R" // 오른손잡이면
right = number
}
}
}
}
return answer
}
func findIndex(number: Int, keypad: [[Int]]) -> [Int] { // 이중 배열에서 해당 값의 인덱스를 찾는 메서드
var answer = [0,0]
for i in 0..<keypad.count { // keypad의 높이? 만큼
for j in 0..<keypad[i].count { // 그 안에 있는 배열의 원소만큼
if keypad[i][j] == number {
answer = [i,j]
break
}
}
}
return answer
}'코딩테스트' 카테고리의 다른 글
| Swift 크레인 인형뽑기 - 프로그래머스 (0) | 2022.06.02 |
|---|---|
| Swift 숫자 문자열과 영단어 - 프로그래머스 (0) | 2022.06.02 |
| Swift 신규 아이디 추천 - 프로그래머스 (0) | 2022.06.02 |
| Swift 신고 결과 받기 - 프로그래머스 (0) | 2022.06.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Encodable
- 공개 채용
- 야곰 아카데미
- Decodable
- ios
- Publisher
- UITableViewDelegate
- dataSource
- Codable
- 야곰
- 롯데 렌탈
- 취준
- 프로그래머스
- UITableViewDataSource
- 스토리보드 분할
- 개발자 취업
- 프로젝트에 적용
- Parse
- Combine
- 코딩테스트
- subscriber
- 롯데그룹 공개채용
- Swift
- 반효경
- DIP
- osi7계층
- 의존성 주입
- Operator
- 운영체제
- 화면 이동
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함