https://school.programmers.co.kr/learn/courses/30/lessons/49994
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 풀이)
1. dirs문자열의 각 문자에 접근해서 위,아래,좌,우 어디로 갈것인지 파악한다.
2. 이동하기 전 좌표를 preCoordinate 문자열로 생성하였다.
이동후 좌표는 postCoordinate문자열로 생성하였다.
3. dirs의 문자가 "U"라면 현재위치 now의 Y좌표인 인덱스 1을 +1한다.
이때 5를 넘어가면 안되니 조건을 걸어줌
"D"는 now의 Y좌표 인덱스 1을 -1한다 -> -5를 넘어가면안됨
"L"는 now의 X좌표 인덱스 1을 -1한다 -> -5를 넘어가면안됨
"R"는 now의 X좌표 인덱스 1을 +1한다 -> 5를 넘어가면안됨
4. 연산이 이뤄지고 이동전, 후 좌표가 같으면 -5나 5를 넘어서 이동을 안한것이므로 조건문을 추가해줌
5. 지나간 자리를 담는 passArray에 존재유무를 contains 메서드를 이용하여 확인하고 없으면 추가해줌.
*주의*
00 -> 01 로 이동한 것과 01->00으로 이동한 것은 같은 경로를 이동 것이기때문에 한번만 추가하도록 해야함
import Foundation
func solution(_ dirs:String) -> Int {
var passArray: [[String]] = [[String]]() //지나간 자리
var now: [Int] = [0,0] //현재 위치
var count = 0 //방문 길이
for i in dirs{
let preCoordinate = String(now[0]) + String(now[1])
switch i{
case "U":
if !(now[1] + 1 > 5){
now[1] += 1
}
case "D":
if !(now[1] - 1 < -5){
now[1] -= 1
}
case "R":
if !(now[0] + 1 > 5){
now[0] += 1
}
case "L":
if !(now[0] - 1 < -5){
now[0] -= 1
}
default:
break
}
let postCoordinate = String(now[0]) + String(now[1])
if preCoordinate != postCoordinate{
let prePostArray: [String] = [preCoordinate,postCoordinate]
let postPreArray: [String] = [postCoordinate,preCoordinate]
if passArray.contains(prePostArray) || passArray.contains(postPreArray) {
}
else{
passArray.append(prePostArray)
count += 1
}
}
}
return count
}
'Swift랑 친해지기 > programmers 풀기' 카테고리의 다른 글
[프로그래머스] 2021 Dev-Matching: 웹 백엔드 개발자(상반기)행렬 테두리 회전하기 (Swift) (0) | 2023.06.01 |
---|---|
[프로그래머스] 연속 부분 수열 합의 개수 (Swift) ※10,20번 시간초과 해결 (0) | 2023.05.30 |
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT[1차] 프렌즈4블록 (Swift) (0) | 2023.05.24 |
[프로그래머스] 공원 산책 (Swift) (0) | 2023.05.22 |
[프로그래머스] 추억 점수 (Swift) (0) | 2023.04.25 |