[프로그래머스] 키패드 누르기 - Swift

이창형·2023년 5월 12일
0

https://school.programmers.co.kr/learn/courses/30/lessons/67256
카카오 문제는 너무 길어요

코드

import Foundation

func solution(_ numbers:[Int], _ hand:String) -> String {
    var answer = ""
    // 왼손 위치
    // 10은 *을 나타냄
    var l = 10
    // 오른손 위치
    // 11은 #을 나타냄
    var r = 11
    
    // numbers를 탐색하며 조건에 맞게 answer에 저장 후 
    // 왼손 오른손 위치를 업데이트
    for h in numbers {
        if h == 1 || h == 4 || h == 7 {
            answer.append("L")
            l = h
        } else if h == 3 || h == 6 || h == 9 {
            answer.append("R")
            r = h
        } else {
             if hand == "right" {
                let rd = distance(r,h)
                let ld = distance(l,h)
             if rd == ld {
                answer.append("R")
                r = h
            } else if rd > ld{
                answer.append("L")
                l = h
            } else {
                answer.append("R")
                r = h
            }
        } else if hand == "left" {
            var rd = distance(r,h)
            var ld = distance(l,h)
            if rd == ld {
                answer.append("L")
                l = h
            } else if rd > ld{
                answer.append("L")
                l = h
            } else {
                answer.append("R")
                r = h
            }
        }
        }
    }
    
    return answer
}

// 현재 손의 위치와 다음 숫자까지의 거리를 bfs로 구하는 함수
func distance(_ h: Int,_ n: Int) -> Int {
    var dis = [1:[2,4], 2:[1,3,5], 3:[2,6], 4:[1,5,7], 5:[2,4,6,8], 6:[3,5,9], 7:[4,8,10], 8:[5,7,9,0], 9:[6,8,11], 0:[8], 10:[7,0], 11:[9,0]]
    var visited = Array(repeating: false, count: 12)
    var queue = [(h, 0)]
    var count = 0
  
    visited[h] = true
    
    while !queue.isEmpty {
        let now = queue.removeFirst()
        if now.0 == n {
            count = now.1
            break
        }
        
        for i in dis[now.0]! {
            if !visited[i] {
                visited[i] = true
                queue.append((i, now.1 + 1))
            }
        }
    }
        return count
}

회고

  • 1단계 였지만 카카오 인턴 문제를 시간내에 풀어서 기분이 좋다
  • 왼손 오른손 위치를 따로 저장하고 다음 숫자까지의 거리를 bfs를 이용하여 해결하였다
  • 다른 사람들 풀이도 한 번 봐야겠다
  • 점점 더 성장하기를
profile
iOS Developer

0개의 댓글