[Silver II] 최소 힙 - 1927 문제 링크 성능 요약 메모리: 81080 KB, 시간: 124 ms 분류 자료 구조, 우선순위 큐 문제 설명 널리 잘 알려진 자료구조 중 최소 힙이 있다. 최소 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오. 배열에 자연수 x를 넣는다. 배열에서 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 프로그램은 처음에 비어있는 배열에서 시작하게 된다. 입력 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 가장 작은 값을 출력하고 그 값을 배열에서 제거하는 경우이다...
[Silver III] 1로 만들기 - 1463 문제 링크 성능 요약 메모리: 87324 KB, 시간: 56 ms 분류 다이나믹 프로그래밍 문제 설명 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 풀이 연산의 최솟값을 구하는 문제이기 때문에 DP와 관련이 있을 것이라 예상하였고, 몇 가지의 수를 나열하여 규칙을 찾고자 하였..
[Silver III] 피보나치 함수 - 1003 문제 링크 성능 요약 메모리: 79508 KB, 시간: 16 ms 분류 다이나믹 프로그래밍 문제 설명 다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다. int fibonacci(int n) { if (n == 0) { printf("0"); return 0; } else if (n == 1) { printf("1"); return 1; } else { return fibonacci(n‐1) + fibonacci(n‐2); } } fibonacci(3)을 호출하면 다음과 같은 일이 일어난다. fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다. fibonacci(2)는 fibonacci(1) (두 ..
[Silver II] 나무 자르기 - 2805 문제 링크 성능 요약 메모리: 155812 KB, 시간: 608 ms 분류 이분 탐색, 매개 변수 탐색 문제 설명 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다. 목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예..
[Silver I] IOIOI - 5525 문제 링크 성능 요약 메모리: 69260 KB, 시간: 152 ms 분류 문자열 문제 설명 N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 군데 포함되어 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. 둘째 줄에는 S의 길이 M이 주어지며, 셋째 줄에 S가 주어진다. 출력 S에 PN이 몇 군데 포함되어 있는지 출력한다. 풀이 i) n의 길이에 맞는 IOI 문자열 Pn을 생성한 뒤, 배열을 순회하면서 만약 해당 문자열과 값이 같다면..
[Silver III] 1, 2, 3 더하기 - 9095 문제 링크 성능 요약 메모리: 69100 KB, 시간: 12 ms 분류 다이나믹 프로그래밍 문제 설명 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. 풀이 이 문제는 규칙..
이 앱은 Apple Developer Academy @ Postech에서 진행한 MC3 프로젝트 때 개발한 앱입니다. 인원도 4명으로 제일 적었고, 해야할 것들도 매우 많았지만,,, 완벽한 팀원들 덕분에 배포까지 완료하였습니다 ㅎㅎ 하지만 배포 과정에서 여러 가지 우여곡절이 많았고, 사실 아직 심사 중이기 때문에 리젝을 당할 수도 있지만,, 배포 과정을 직접 진행한 과정을 정리해두고 싶어서 포스팅을 하고자 합니다. 우선 처음으로 배포 과정을 진행해보았는데, 배포 해보고 싶다는 저의 의견을 들어주신 팀원분들 감사드립니다 ^_^ (꾸벅) 과정 앱스토어 커넥트에 추가하기 우선 앱 스토어 커넥트에 들어가 본인의 계정으로 로그인한 뒤, 나의 앱을 선택해줍니다. + 버튼을 통해 신규 앱을 생성해줍니다. 앱 정보 입..
[Silver III] 구간 합 구하기 4 - 11659 문제 링크 성능 요약 메모리: 76204 KB, 시간: 196 ms 분류 누적 합 문제 설명 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다. 출력 총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다. 풀이 i) 처음에는 해당 값들을 전부 받은 뒤 인덱스가 같은 경우를 제외한 뒤, for문을 통해 합을 더하고, 출력하는 형식으로 생각했습니다. let nm = read..