https://www.acmicpc.net/problem/3273 3273번: 두 수의 합 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 www.acmicpc.net 난이도 : 실버 3 태그 : 두 포인터, 정렬 설명 수열이 주어질 때, 두 수의 합이 특정 수와 비슷한 수를 찾는 문제입니다. 해당 문제는 투 포인터(두 포인터)를 사용해 풀 수 있을 것 같네요. 투 포인터 투 포인터 알고리즘은 두 개의 포인터를 사용해 범위 혹은 두 개의 조합을 찾아나가는 방식입니다. 첫 원소와 마지막 원소를 가르킬 bott..
https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 난이도 : 실버 4 태그 : 수학, 그리디, 정렬 설명 n개의 로프가 주어지고, k개의 로프로 w만큼의 물체를 들어올릴때, 각 로프에는 w/k의 부하가 걸립니다. 10를 버틸 수 있는 로프 하나, 15를 버틸 수 있는 로프 하나가 있으면 15개 하나를 사용하는 것 보다는, 10만큼씩 2개를 사용해 20의 무게를 들어올리는게 더 효율적입니다. 각각 5, 10, 15, 20, 25를 들어올릴..
https://www.acmicpc.net/problem/15688 15688번: 수 정렬하기 5 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이며, 같은 수가 여러 번 중복될 수도 있다. www.acmicpc.net 난이도 : 실버 5 태그 : 정렬 설명 시간 누적이라는, 모든 테스트 케이스의 시간이 누적되는 문제로써, 굉장히 타이트한 시간이 주어지는 문제입니다. 시간이 매우 타이트한 만큼, 시간안에 통과하기 위해 bufferedReader와 StringBuilder를 필수로 사용해야 합니다. 소스코드 import java.io.BufferedReader; import java..
https://www.acmicpc.net/problem/11931 11931번: 수 정렬하기 4 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 난이도 : 실버 5 태그 : 정렬 설명 그동안의 수 정렬하기가 오름차순 이였다면, 이번엔 내림차순 정렬입니다. 이번엔 조금 특이하게 정렬을 해봤는데요. PrioryQueue(우선순위 큐)를 사용해 정렬을 해보았습니다. 우선순위 큐는 말 그대로 원소값에 따라 우선순위를 갖는 큐로써, 꽤 자주 사용되는 자료구조 입니다. 우선순위 큐는 원소가 삽입될때 마다 정렬이 되며, 우선순위 큐를 ..
https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 난이도 : 브론즈 1 태그 : 정렬 설명 중복되는 수가 주어지는 상황에서의 정렬입니다. 수의 개수가 1부터 10,000,000개로 매우 많습니다. 하지만 n의 범위는 1부터 10,000으로 그리 많지는 않습니다. n의 개수와 범위를 봤을 때, 이 문제에서는 카운팅 정렬(계수 정렬)을 쓰면 좋을 것 같습니다. 계수 정렬 계수 정렬은 1~n 길이의 배열을 만들어놓고, 특정 데이터가 들어올때마다 해당 인덱스의 값을 +1 ..
https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 난이도 : 실버 5 태그 : 정렬 설명 수 정렬하기 두 번째 문제입니다. 1편에서는 직접 삽입정렬을 구현해 풀이해봤다면, 이번엔 자바에서 기본적으로 제공하는 정렬 기능을 사용해 풀어보겠습니다. 소스코드 import java.io.BufferedReader import java.io.InputStreamReader import java.util.Collections fun main() {..
https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 난이도 : 브론즈 2 태그 : 구현, 정렬 설명 N개의 수를 오름차순 정렬하는 문제입니다. 정렬 알고리즘에는 정말 많은 알고리즘이 있습니다. 버블정렬, 선택정렬, 힙 정렬, 퀵 정렬, 기수 정렬, 병합 정렬 등등... 언어에서 자체적으로 제공하는 정렬 알고리즘은 보통은 굉장히 효율적이고, 많이 연구된 알고리즘을 사용하여 실제 개발에서는 정렬을 직접 구현하기 보단 언어에서 자체적으로 제공하는 메소드를 사용..
https://www.acmicpc.net/problem/2109 2109번: 순회강연 한 저명한 학자에게 n(0 ≤ n ≤ 10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1 ≤ d ≤ 10,000)일 안에 와서 강연을 해 주면 p(1 ≤ p ≤ 10,000)만큼의 강연료를 지불하겠다고 알려왔다. www.acmicpc.net 난이도 : 골드 3 태그 : 자료구조, 그리디 알고리즘, 우선순위 큐, 정렬 설명 d일 안에 강의를 하러 오면 p만큼의 돈을 받을 수 있습니다. n개의 강의를 갈 수 있을 때, 최대로 벌 수 있는 돈을 구하는 문제입니다. 이 문제를 처음 봤을 때 든 생각은, 아! 일자를 오름차순 정렬하고, 돈을 내림차순 정렬하면 되겠구나! 생각했습니다. 하지만, 머지않아 몇 개..
https://www.acmicpc.net/problem/6996 6996번: 애너그램 첫째 줄에 테스트 케이스의 개수(
https://www.acmicpc.net/problem/10867 10867번: 중복 빼고 정렬하기 첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. www.acmicpc.net 난이도 : 실버 5 태그 : 정렬 설명 중복이 없게 함을 위해 set 자료구조를 사용하였습니다. set (집합)은 자료에 순서가 없고, 중복 또한 없기 때문에 중복을 제거할 때 유용합니다. 모든 데이터를 다 받았을 때, 한 번만 정렬하여 출력하면 됩니다. 소스코드 import java.io.BufferedReader import java.io.InputStreamReader import java.util.StringTokeni..