본문 바로가기
반응형

분류 전체보기282

백준 7662번 이중 우선순위 큐 - C++(cpp) 풀이 문제 제목에서부터 알 수 있듯이 우선순위 큐를 써야 하는데, 스위프트에는 라이브러리로 우선순위 큐를 제공하지 않아서 C++로 풀었다. 1. 최댓값은 최댓값 큐에서 찾는다. 2. 최솟값은 최솟값 큐에서 찾는다. 3. 반대쪽 큐에서 제거된 값인지 구별하기 위해, map에 해당 숫자가 현재 몇 개 남아있는지 기록한다. 먼저 최대값과 최솟값을 모두 알아내야 하므로 우선순위 큐를 2개 운영해야 한다. 하나는 최댓값용, 하나는 최솟값용으로. 근데 이렇게 되면 삭제를 할 때 문제가 된다. 최솟값을 삭제하라는 쿼리가 들어오면, 최솟값 큐에서 pop을 할 것이다. 근데 이 최솟값이 최댓값 큐에는 남아있게 된다. 따라서 반대 큐에서 삭제 여부를 알 수 있도록, 어떤 수 x가 현재 몇 개 남아 있는지를 기록해두어야 한다. .. 2022. 1. 14.
[Swift] 소수점 제거하기 (반올림, 올림, 내림, 버림 등) PS를 하다 보면 반올림, 올림, 내림, 버림 등 소수점을 제거해서 출력해야 할 때가 종종 있다. 찾아보다가 이 모든 것을 전부 할 수 있는 만능 메소드를 찾았다! FloatingPoint 프로토콜에 정의된 round(_:)라는 메소드이다. 기본 자료형인 Float과 Double 모두 FloatingPoint 프로토콜을 채택하고 있기 때문에 round 메소드 사용이 가능하다. mutating func round(_ rule: FloatingPointRoundingRule) 형태는 mutating func round(_ rule: FloatingPointRoundingRule). 제거한 결과값을 리턴하는 게 아니라 mutating func이기 때문에 인스턴스 값 자체가 바뀐다. 따라서 immutable 한.. 2022. 1. 13.
백준 1966번 프린터 큐 - 스위프트(Swift) 풀이 배열로 환형 큐를 구현하면 된다. front를 현재 맨 앞에 있는 문서를 가리키는 포인터라고 하면, 1. 앞에서 뽑은 것을 다시 맨 뒤에 넣기 : 그냥 front를 하나 뒤로 옮기면 저절로 된다! 2. 인쇄하기 : 해당 자리에 인쇄 표시를 하고 front를 뒤로 하나 옮긴다. (다음에 front가 이 자리에 오면 없는 셈 치고 스킵하면 됨) 3. 인쇄해야할 대상인지 판단 : 우선순위들을 정렬한 배열을 따로 둬서 남은 문서 중 우선순위 최댓값을 알 수 있도록 한다. 1. 앞에서 뽑은 것을 다시 맨 뒤에 넣기 front를 하나 뒤로 옮기면, 그 다음 문서가 front가 되고, 현재 문서는 front의 바로 왼쪽으로 가게 된다. front를 계속 우측으로 한 칸씩 이동시킬 것이므로, front의 바로 왼쪽에 .. 2022. 1. 13.
[Swift] 배열 정렬하기 알고리즘 문제를 풀다 보면 정렬이 되게 자주 필요한데, 매번 직접 구현하기는 번거롭다. Array에는 이미 O(NlogN)의 sort 메소드가 구현되어 있으니 이걸 쓰자. Array 공식문서로 가보면, 정렬 관련 메소드는 4개를 제공한다. 하나씩 자세히 살펴볼 건데, 일단 사용법만 빠르게 요약 먼저! 다시 공식 문서로 돌아와서, 4개의 정렬 메소드를 살펴보자. 두 가지 기준으로 둘둘씩 나눌 수 있는데 원본 배열 자체를 변경하느냐에 따라 원본 자체를 변경 : sort(), sort(by:) 원본은 두고 정렬된 새 배열을 리턴 : sorted(), sorted(by:) 정렬 기준을 어떤 방법으로 정의해주냐에 따라 Comparable 프로토콜 채택 : sort(), sorted() (Element, Eleme.. 2022. 1. 13.
백준 2292번 벌집 - 스위프트(Swift) 풀이 자료형 범위 신경 안 써서 틀려버린 문제.......ㅎㅎ 브론즈라 방심했다. 중심인 1을 기준으로 한 겹(?)씩 늘어나면서 육각형 모양이 점점 커지는데, 한 겹 늘어날 때마다 전체 육각형의 한 변의 길이는 1씩 늘어난다. 따라서 최초를 0겹이라 하면, n겹 차에는 n*6개(모든 변의 길이의 합만큼)가 새로 추가된다. 예를 들어서 설명하면 처음에 1만 있는 상황은 0겹차고, 이제 1겹 차에는 1*6 = 6개, [2, 3, 4, 5, 6, 7]가 추가된다. 2겹차에는 2*6 = 12개, [8, 9, 10, 11, ..., 19]이 추가된다. 이렇게 n겹 차에 추가되는 수 중 가장 작은 수를 lo라고 하고 가장 큰 수를 hi라고 두어서, 이번 겹 차에 N이 들어가는지 체크해주는 방식으로 구현했다. 방금 예로 .. 2022. 1. 13.
반응형