itisjustK
코딩과 사람 사는 이야기
itisjustK
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • 일이삼사오육칠팔구십일이삼사오육칠팔구십일이삼사오육칠.. (0)
    • Web (43)
      • html & css (9)
      • django & python (15)
      • java script (9)
    • iOS (51)
      • Swift (42)
      • SwiftUI (5)
    • CS (25)
      • 자료구조 (6)
      • 운영체제 (3)
      • 데이터베이스 (9)
      • 네트워크 (7)
    • PS (34)
      • 알고리즘 & 자료구조 (0)
    • Life (36)
    • Retrospective (15)
    • Book (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 점주
  • 연결리스트
  • 어플
  • nosql
  • 개발자
  • 생활코딩 #이고잉 #HTML #코딩 #개발자
  • SwiftUI
  • 킨디
  • binding
  • CoreData
  • mongodb
  • SWIFT
  • POSTECH
  • 독립서점
  • 세그멘테이션
  • CS
  • 생활코딩
  • ios
  • crud
  • AppleDevloperAcademy

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
itisjustK

코딩과 사람 사는 이야기

PS

[백준 - Swift] 1874 스택 수열

2023. 1. 19. 17:34

문제

https://www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 

 

풀이

 1. 1에서 n까지 반복문을 돌면서 - O(10^5)

 2. 각 시행에서 stack에 push하고 result에 "+" 추가 - O(1)

 3. 각 시행에서 while문으로 pop해야할 게 없을 때까지 처리 (총 순회가 O(10^5)라서 괜츈)

 4. 2&3 반복문으로 돌림

 5. targets의 isEmpty에 따라 정답 출력

 

전체적으로 Array의 O(1) 연산을 이용하기 위해 기존 배열을 역순으로 바꾸었다. while문 내부에서 last를 적극적으로 사용하여 연산을 가볍게 가져가려 했다.

 

 

코드

let N = Int(readLine()!)!
var targets = Array(repeating: 0, count: N)
var stack = [Int](), arr = [Int](), result = [String]()

Array(0..<N).reversed().forEach{ targets[$0] = Int(readLine()!)! }

for i in 1...N {
    stack.append(i)
    result.append("+")
    
    while let last = stack.last, let target = targets.last, last == target {
        arr.append(stack.removeLast())
        result.append("-")
        targets.removeLast()
    }
}

if targets.isEmpty {
    result.forEach{ print($0) }
} else {
    print("NO")
}

 

저작자표시 (새창열림)

'PS' 카테고리의 다른 글

[백준 - Swift] 4358 생태학  (0) 2023.01.20
[백준 - Swift] 10799 쇠막대기  (0) 2023.01.19
[프로그래머스 - Swift] 다리를 지나는 트럭  (0) 2023.01.19
[ 백준 2579 - 계단 오르기 ]  (0) 2021.08.11
[ 백준 1003 - 피보나치 함수 ]  (0) 2021.08.10
    'PS' 카테고리의 다른 글
    • [백준 - Swift] 4358 생태학
    • [백준 - Swift] 10799 쇠막대기
    • [프로그래머스 - Swift] 다리를 지나는 트럭
    • [ 백준 2579 - 계단 오르기 ]
    itisjustK
    itisjustK

    티스토리툴바