[BOJ] 2164 - 카드2

2022. 5. 24. 11:21·알고리즘/Swift

문제

 

풀이 코드

struct Queue<T> {
    private var elements: [T] = []
    private var reverseElement: [T] = []

    public var size: Int {
        return elements.count + reverseElement.count
    }

    public mutating func push(_ element: T) {
        return elements.append(element)
    }

    public mutating func pop() -> T? {
        if reverseElement.isEmpty {
            reverseElement = elements.reversed()
            elements.removeAll()
        }
        return reverseElement.isEmpty ? nil : reverseElement.popLast()
    }
}

var queue = Queue<Int>()
let N = Int(readLine()!)!

for n in 1...N {
    queue.push(n)
}

while queue.size != 1 {
    queue.pop()
    if let item = queue.pop() {
        queue.push(item)
    }
}

print(queue.pop()!)

 

풀이 과정

그냥 Queue를 이용하여 풀면 될거 같았다.

큐를 이용해 간단하게 구현하였지만 시간초과가 발생했다.

그 이유는 removeFirst 때문인데 첫 요소를 제거하면 다음의 엘리먼트들을 앞으로 한칸씩 땡겨와야 하기 때문에 연산시간이 오래걸린다.

그래서 removeElement 라는 변수를 큐 구조체내에 따로 구현해 주고, reversed 를 통해 마지막 요소를 제거하도록 했더니 시간초과 문제가 해결 되었다.

 

알고리즘을 풀때 첫요소나 중간 요소를 제거하면 그만큼 연산시간이 오래 걸린다는것을 배웠다.

'알고리즘/Swift' 카테고리의 다른 글
  • [Programmers] n^2 배열 자르기
  • [BOJ] 1918 - 후위 표기식
  • [BOJ] 1935 - 후위 표기식2
  • [BOJ] 17299 - 오등큰수
Jeohong
Jeohong
기억 보단 기록을
  • Jeohong
    Chikong Devlog
    Jeohong
  • 전체
    오늘
    어제
    • 분류 전체보기 (186)
      • ---- 개발 컨텐츠 ---- (0)
      • iOS (30)
        • Swift 문법 (1)
        • iOS 개념 (12)
        • HIG (5)
        • SwiftUI (7)
        • UIKit (4)
      • Side Project (0)
      • 개발서적 (4)
        • 객체지향 사실과 오해 (4)
      • 알고리즘 (74)
        • 자료구조 개념 (2)
        • Swift (25)
        • JavaScript (47)
      • ---- 회고 계획 컨텐츠 ---- (0)
      • 계획 및 일기 (10)
      • 회고록 (1)
      • 컨퍼런스 탐방 (1)
      • 미드로 영린이 탈출하기 (1)
      • ---- Previous content ---- (0)
      • Frontend (2)
        • HTML & CSS (2)
      • KITRI 수업 (17)
        • 리눅스 (14)
        • 네트워크 (2)
      • 42seoul (17)
        • Bonr2code (9)
        • 넋두리 (7)
        • 멘토특강 (1)
      • 해킹 실습 (20)
        • 해커스쿨 - F.T.Z (19)
        • WebGoat (1)
      • Tensorflow로 시작하는 NLP (1)
        • 예제 (1)
      • 자연어처리 입문 (1)
        • 이론 (1)
      • 텐서플로로 배우는 딥러닝 (7)
        • 이론 (2)
        • 예제 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    42서울
    boj
    IOS
    hig
    본과정
    네트워크
    알고리즘
    프로그래머스
    코딩
    백준
    스위프트
    SwiftUI
    자료구조
    개발자
    라피신
    42seoul
    javascript
    1서클
    Algorithm
    swift
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Jeohong
[BOJ] 2164 - 카드2
상단으로

티스토리툴바