Where who wants to meet someone
배열 만들기 6 본문
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/181859
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 답안 / 다른 사람들의 답안
import Foundation
func solution(_ arr:[Int]) -> [Int] {
var i = 0
var stk = [Int]()
while i < arr.count {
if stk.last == arr[i] {
stk.removeLast()
} else {
stk.append(arr[i])
}
i += 1
}
return stk.isEmpty ? [-1] : stk
}
- while문을 통해 작업을 반복 수행
- 세 가지의 경우가 있으나 두 가지는 수행하는 코드가 똑같아 if...else를 통해 두 경우로 나누어 수행 후 반환
// 풀이 1
import Foundation
func solution(_ arr:[Int]) -> [Int] {
var stack = [Int]()
arr.forEach {
if let last = stack.last, last == $0 { stack.removeLast() }
else { stack.append($0) }
}
return stack.isEmpty ? [-1] : stack
}
// 풀이 2
import Foundation
func solution(_ arr:[Int]) -> [Int] {
var stk: [Int] = []
var i = 0
while i < arr.count {
if stk.isEmpty {
stk.append(arr[i])
i += 1
} else if stk.last! == arr[i] {
stk.removeLast()
i += 1
} else {
stk.append(arr[i])
i += 1
}
}
return stk.isEmpty ? [-1] : stk
}
- 어차피 i는 어떤 작업에서도 +1이 되므로 arr의 크기보다 작아야 하는 조건과 결합하면 arr.forEach로 해결할 수도 있는 문제였다.
점수: +2
'프로그래머스 알고리즘 문제 기록 > 코딩 기초 트레이닝' 카테고리의 다른 글
문자열 묶기 (0) | 2024.02.14 |
---|---|
특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 (0) | 2024.02.14 |
세 개의 구분자 (1) | 2024.02.13 |
배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2024.02.08 |
날짜 비교하기 (0) | 2024.02.08 |