본문 바로가기

반응형

분류 전체보기

(395)
99클럽 코테 스터디 19일차 TIL: 힙 문제https://www.acmicpc.net/problem/1927풀이힙을 구현하면 되는 문제이다.파이썬이나, c++ stl에는 힙이나 우선순위큐가 있는 것으로 알고있는데, Swift에는 없어서 직접 구현해주어야 한다.음.. 기억상으로 파이썬에서 최대힙? 만 지원해서 음수를 곱해서 넣거나 이런 스킬들을 사용했었던 것으로 기억이 어렴풋난다..Swift로 힙을 구현하는 것은 해봤어서, 해당 코드로 문제를 풀이하였다.힙 구현한 것은 이전에 포스팅 해두었었다.https://dev-mandos.tistory.com/244 [자료구조] Heap에 대해 알아보고 구현해보기 (Swift)Heap이란? Heap은 트리를 사용하고, 트리 중 에서도 완전이진트리를 기본으로 한 자료구조입니다. 주로 최솟값과 최댓값을 빠르게..
99클럽 코테 스터디 18일차 TIL: 그리디, 정렬 문제https://www.acmicpc.net/problem/2212풀이일단 문제를 이해하는 것에 시간이 좀 들었다.집중국를 어디에 두어야 최솟값을 구해야할 지 머릿속으로 생각해보고 있었다.이 문제에서는 기존에 주어진 입력을 정렬해도 상관없겠다 생각해서 정렬해서 생각해보았다.[1, 3, 6, 6, 7, 9]2에하나, 7에하나 두는게 정답인데 멍청하게 6이 두개일 때 6에서 7을 수신하는데 드는 거리를 2라고 생각했다;; (두개여서..)이 부분에서 시간을 많이 잡아먹었다.결국 구간을 나눠야 되는 것이라고 생각했고 구간은 차이가 가장 큰 부분을 나눠주면 된다고 생각했다.1번 예제에서는 구간을 두개로 나눠야 하므로, 차이가 가장 큰 부분을 빼주면 두 구간으로 나누게 된다.[2, 3, 0, 1, 2] 라면 3,..
99클럽 코테 스터디 17일차 TIL: 수학 문제https://www.acmicpc.net/problem/31926풀이규칙을 찾으면 쉽게 풀 수 있는 문제이다.n = 1 일 때 문장은 다음과 같다.daldidalgodaldidan => 10하나씩 뜯어보자.[d][a][l][d][i][dal][g][o][daldia][n] => 10n = 2일 때는 다음과 같다.[d][a][l][d][i][dal][g][o](9) + [daldidalgodaldida][n] => 11n = 3 일 때도 11이다. 2의 제곱 만큼 중복된 것을 선언할 수 있다.n = 4일 때 부터 12, 8부터 13, 16부터 14 .. 이는 수식으로 표현했을 때 $log_2(N)$ 을 내림처리하여 10을 더해주는 것으로 도출할 수 있다. 소스코드후기달디달고달디달고.. 규칙을 찾는데 ..
99클럽 코테 스터디 16일차 TIL: 그리디 문제https://www.acmicpc.net/problem/2847풀이현재 레벨에 얻을 수 있는 점수가 다음 레벨에서 얻을 수 있는 점수 보다 크다면,현재 레벨에서 얻을 수 있는 점수를 낮춰주면 된다.점수를 내리는 것을 최소한으로 해야하기 때문에, 다음 레벨에서 얻을 수 있는 점수보다 1 낮게 셋팅해주면 된다.항상 답이 존재하는 경우만 있으므로, 음수가 되는 것은 일단 생각하지 않고 풀이하였다.그런데 이 문제는 앞에서부터 확인하는 것이 아닌 뒤에서 부터 확인해야 한다.왜 그럴까?예시 입력의 5, 5, 5를 확인해보자첫번째 레벨의 점수가 5점이고, 두번째 레벨의 점수가 5점이다.그러면 첫번째 레벨의 점수를 1 낮춰 4로 변경해주자.그러면 다음과 같다. 4, 5, 5두번째 레벨의 점수와 세번째 레벨의 점수..
99클럽 코테 스터디 15일차 TIL: 스택 문제https://school.programmers.co.kr/learn/courses/30/lessons/12906풀이Stack을 사용해서 연속된 element를 제거하면 되는 문제이다.새로 드러올 요소가 TOP과 같은지 비교하면 되는 문제소스코드후기쉽게 풀 수 있는 문제였다. 시간이 없어서 비기너 문제를 풀었따.
99클럽 코테 스터디 14일차 TIL: DP 문제https://www.acmicpc.net/problem/14916풀이DP로 쉽게 풀 수 있는 문제이다.Bottom-Up 방식으로 풀이하였고, 메모이제이션 하기 위한 1차원 Int 배열을 선언하고, 값을 큰 값(INF)으로 초기화해주었다.먼저 2원과 5원만 존재하기 때문에 다음과 같이 기본값을 셋팅했다.dp[2] = 1dp[4] = 2dp[5] = 1이제 6부터 N의 최대값인 10만까지 반복문을 돌려야겠다고 생각했다.6원을 만드는 경우의 수는 4원에서 2원을 더하는 것과 1원에서 5원을 더하는 두가지 방법잉있다.하지만 1원을 만드는 방법은 없어서 4원에서 2원을 더하는 것이 최소 횟수이다.초기값: $f(2) = 1, f(4) = 2, f(5) = 1$다음과 같은 점화식을 유추할 수 있다.$if\ (..
99클럽 코테 스터디 13일차 TIL: 수학 문제https://www.acmicpc.net/problem/27961풀이이 문제는 최소 행동으로 정확히 N 마리의 고양이를 만드는 문제이다.문제를 읽어보면 눈치채겠지만, 생성마법 보다 복제마법이 무조건 유리하다.이는 그리디 알고리즘이라고 할 수 있을 것 같다.0 -> 1 -> 2 -> 4 -> 8 -> 16 ...고양이를 최소행동으로 많이 생성하려면 2의 제곱형태로 복제하는 것이 가장 빠르다.여기서 한가지 패턴을 발견할 수 있다.현재 고양이가 4마리가 있다고 가정해보자.4마리에서 7마리를 만드는거나, 8마리를 만드는거나 동일한 횟수 (복제마법) 이 필요하다는 것을 알 수 있다.4...8, 8...16, 16...32 해당 범위 안으로 고양이를 만드는 것은 동일하다.수학적으로 보면 $log_{2}N$ 임..
99클럽 코테 스터디 12일차 TIL: 3차원 그래프 문제https://www.acmicpc.net/problem/7576풀이토마토 문제와 비슷한 문제이다.조금 다른점이 하나 있는데 높이가 추가되었다는 점이다.기존에 상하좌우로 퍼졌던 토마토가, 상하좌우 위아래(?) 두 방향이 추가되었다.나는 이런 문제를 풀 때, 기존에 방향을 설정해줄 변수로 dy, dx을 다음과 같이 정의하였다.let dy = [1, 0, -1, 0]let dx = [0, 1, 0, -1]북동남서 방향으로 시계방향으로 정의하였었는데, 이제 추가로 z축도 필요하다고 생각했다.그래서 방향을 다음과 같이 정의했다.let dz = [0, 0, 0, 0, 1, -1]let dy = [1, 0, -1, 0, 0, 0]let dx = [0, -1, 0, 1, 0, 0]여기까지 이해했다면 반은 풀었다고..

반응형