본문 바로가기

분류 전체보기

(386)
[c++] 백준 1427 소트인사이드 백준 단계별로 풀어보기 [정렬] 소트인사이드 https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하고자하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net [풀이] 입력받은 수 n을 쪼개 배열에 저장한 뒤 sort 함수를 이용해 정렬한다. 이때, 내림차순으로 정렬하기 위한 cmp 함수를 정의하여 sort 함수의 인자로 전달한다. [코드] #include #include bool cmp(const int& a, const int& b) { return a > b; } int main() { int n, cnt=0; std::cin >> n; int arr[10]; while (n != 0) { ..
[c++] 백준 1436 영화감독 숌 백준 단계별로 풀어보기 [브루트 포스] 영화감독 숌 https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net [풀이] 시리즈에 들어가는 숫자는 666-1666-2666-3666-4666-5666-6660-6661 ... 와 같이 증가한다. 모든 수에 대하여 "666"이 들어가면 count 값을 증가시키고 count 값이 n과 일치할 때의 수를 출력해주면 된다. 이를 위해 숫자를 to_string을 통해서 문자열로 변환하고, find 함수를 이용하여 "..
[c++] 백준 3052 택시 기하학 백준 단계별로 풀어보기 [기본수학 2] 택시 기하학 https://www.acmicpc.net/problem/3053 3053번: 택시 기하학 첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다. www.acmicpc.net [풀이] 유클리드 기하학과 택시 기하학에서 두 점 사이의 거리에 대한 서로 다른 정의를 하고 있음을 이해해야한다. 문제 설명에서도 나와있듯이 택시 기하학은 두 점 (x1, y1), (x2, y2) 에 대해서 두 점 사이의 거리를 |x1-x2|+|y1-y2| 로 정의하고 있으므로 한 점에서 모두 같은 거리에 있는 점으로 이루어지는 원에 대해서도 유클리드 기하학에서 말하는..
[c++] 백준 1181 단어 정렬 백준 단계별로 풀어보기 [정렬] 단어 정렬 https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net [풀이] string을 저장하는 배열을 만들고, 길이가 짧은 순으로, 만약 길이가 같다면 사전 순으로 정렬한다. cmp 함수에 이와 같은 조건을 정해주고 sort 함수 세번째 인자로 전달해준다. 정렬 후 같은 단어가 있다면 한 번만 출력하도록 continue를 걸어준다. [코드] #include #include bool cmp(const std..
[c++] 백준 10814 나이순 정렬 백준 단계별로 풀어보기 [정렬] 나이순 정렬 https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net [풀이] 같은 조건인 경우(위 문제에서는 같은 나이) 입력된 순서대로 출력되는 정렬인 stable_sort를 사용한다. [코드] #include #include typedef struct { int age; std::string name; }Person; bool cmp(const Person& a, const Person& b) { return a.age ..
[c++] 백준 11650 좌표 정렬하기 백준 단계별로 풀어보기 [정렬] 좌표 정렬하기 https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net [풀이] STL의 sort를 이용해서 풀었다. sort(begin, end, pred)의 3가지 인자를 전달하는데, pred 자리에는 특정한 조건을 추가 인자로 받는다. 여기서는 두 x좌표가 같은 경우 y 좌표가 증가하는 순서대로 정렬되게끔하고 그 외의 경우에는 x좌표의 크기에 따라 정렬하는 boo..
[c++] 백준 2750 수 정렬하기 백준 단계별로 풀어보기 [정렬] 수 정렬하기 https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net [풀이] 선택정렬을 사용하여 풀이하였다. 선택정렬은 첫번째 값을 그 다음 값부터 마지막 값까지 차례로 비교하여 가장 작은 값이 맨 앞에 오도록 swap해주는 방식을 반복하며 정렬을 수행한다. [코드] #include #define SWAP(x, y, z) ((z)=(x), (x=y), (y=z)) int main() { int num, least, temp=..
[c++] 백준 2798 블랙잭 백준 단계별로 풀어보기 [브루트 포스] 블랙잭 https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net [풀이] 주어진 n개의 카드에 대해서 그 중 세 카드의 숫자의 합이 m을 넘지않으면서 가장 큰 경우의 합을 출력해야 한다. 배열에 저장한 카드의 모든 경우의 합을 구하되 앞의 카드와 같은 카드를 뽑지 않도록 continue를 걸고, m보다 작으면서 가장 큰 max 값을 구해 출력한다. [코드] #include int m..