백준 1436번 영화감독 숌[C/C++]
1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net #include #include using namespace std; int main() { int end_num, n, count = 1; string str; cin >> n; if (n == 1) { cout 7666이 아닌 6665부터의 숫자도 잘 세줘야 한다.(6 세개가 붙어있기 때문.) 틀렸던 이유 경계값 테스트를 제대로 안해서 문제가 생겼었다. 원래는 cout
2021.05.13
백준 11651번 좌표 정렬하기2 [C/C++]
11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 문제 [C++, STL] 구조체, pair 벡터 정렬 다른 글 [C++, STL] 알고리즘 문제풀이를 위한 벡터(vector) [C++, STL] 알고리즘 문제풀이를 위한 pair [C++, STL] 우선순위 큐(priority queue) 비교연산자 구현 서론 벡터에 들어갈 수 있는 자료형에 pair와 st.. hydroponicglass.tistory.com y좌표를 기준으로 오름차순 정렬을 해야한다. ..
2021.03.03
백준 7568번 덩치 [C/C++]
7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 문제 자체는 상당히 간단한 내용이다. 브루트 포스를 사용하면 해결되는 문제이고, 아래 코드는 해결 방법이다. #define _CRT_SECURE_NO_WARNINGS #include using namespace std; //키는 0열, 몸무게는 1열에 저장. 2열에는 등수 저장. int arr[51][3]; int main() { int n, x, y; int count; cin >> n; for (int i = 0; i < n; i++) { sca..
2021.03.02
백준 2805번 나무 자르기 [C/C++]
2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 문제 나무를 필요한 만큼만 잘라서 가져감. M미터의 나무를 집에 가져가기 위해 절단기에 설정할 수 있는 높이의 최대값을 구하는 프로그램을 작성하라. 입력 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) int형은 4바이트(32비트)이며, 수의 범위는 -2,147,483,648 ~ 2,147,483,647"이다..
2021.02.28
백준 1920번 수 찾기 [C/C++]
1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 문제 N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오. 정수가 존재하는지 확인만 하면 되기에, 탐색 문제라고 생각했다. 이분 탐색으로 접근해서 풀었는데 바로 성공한 문제이다. 그리고 mid를 구하는 코드부분에서 start+end / 2의 부분에서 연산자 우선순위를 고려하지 않고 코드를 짜서 디버깅할 때 헤매었다. #define _C..
2021.02.28
백준 1654번 랜선 자르기 [C/C++]
1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 문제 주어진 K개의 랜선으로 N개의 랜선을 만들어라. 300cm 랜선으로 140짜리 랜선을 두 개 만들면 나머지 20는 버려야 한다. 입력 K는 1이상 10,000이하의 정수이다. N은 1이상 1,000,000이하이다. 출력 N개를 만들 수 있는 랜선의 최대 길이를 센티미터 단위의 정수로 출력한다. 풀이 문제를 읽어도 무엇을 사용해야 하는지 감이 안잡혀서, 알고리즘 분류를 보았는데 이분 탐색을 활용한다고 한다. 다른 블로그에서 이분 ..
2021.02.24
no image
백준 10989번 수 정렬하기3 [C/C++]
10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제 문제에 대한 설명을 읽어보면, 주어지는 수의 범위는 10,000보다 작거나 같다. 이렇게 숫자의 범위가 작은 문제는 카운팅 소트로 풀어야 하는 문제이다. 카운팅 소트는 입력되는 숫자의 범위가 작을 때 유용한 정렬이다. 숫자에 대한 비교가 이루어지지 않으므로, O(n)의 속도를 가진다. 구현된 것을 확인해보면 배열에 인덱스를 통해 바로 접근을 시도하기 때문에, 제한된 범위가 있는 문제에서는 상당히 효율적이다. #define _CRT_SECURE_NO_WARNINGS #inclu..
2021.02.21
백준10250번 ACM호텔 [C/C++]
10250번: ACM 호텔 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수 www.acmicpc.net 문제 문제에 설명이 길지만, 자세히 보면 간단한 문제이다. 키포인트 손님이 오른쪽으로 한 칸씩 이동할 때마다 거리가 1씩 늘어난다. 엘레베이터를 손님의 출발 시작 기준으로 잡기 때문에 101, 201, 301호 모두 다 거리는 1이다. 손님은 이동거리가 같으면 아래층을 더 선호한다고 한다. 요약하자면, 입력 데이터에서 높이가 3으로 주어졌을 때, 손님은 101, 201, 301순으로 찰 것이고 h의 높이만큼 손님이 가득차게 되면 이동거리가 1증가하고,..
2021.02.20
백준 2108번 통계학 [C/C++]
2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 별 다를 거 없는 구현 문제이지만, 산술평균을 구할 때 반올림과 음수와 양수를 저장하는 배열을 만드는 것이 핵심이었던 것 같다. 문제 조건을 제일 처음에 제대로 읽지않아 입력 부분에서 "정수의 절댓값은 4,000을 넘지 않는다."라는 구절을 못봐서 시간을 많이 날렸다. 문제를 제대로 읽는 습관을 계속 길러야겠다. 코드 #include #include #include using namespace std; int check[8001]; int find_mean(vector vec, int n) { d..
2021.02.15
백준 2798번 블랙잭 [C/C++]
2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 해결방법 세 개의 합을 구할 때 m보단 작되 제일 큰 수를 구하면 된다. 브루트 포스로 하나씩 비교해가면서 조건에 맞는 수를 찾으면 된다. 코드 #include using namespace std; int main() { int arr[100]; int n, m; cin >> n >> m; for (int i = 0; i > arr[i]; } int result = 0; int sum = 0; for..
2021.01.23
no image
백준 1158번, 11866번 요세푸스 문제 [C/C++]
1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 요세푸스 순열 n명이 동그랗게 모여있을 때 임의의 한 명부터 순서를 세어 k번째 사람을 모임에서 제외한다. 남은 n-1명에서 다시 다음 사람부터 순서를 세서 k번째 사람을 모임에서 제외한다. 이것을 아무도 남지 않을 때까지 계속해서 반복한다. 예를 들어 문제 입력에 10, 7이 주어지면 처럼 답이 나온다. 이것을 이해를 돕기위해 적어보았는데 오히려 직관성이 조금 떨어진다.. 어쨌든 요약하자면 사람의 수가 총 5명이 남았는데 7번째 사람을 죽여야 하는 경우라면 위 그림처럼 이루어진다. 풀이코드 코드1 #define _CRT_SECURE_NO_WARNING..
2021.01.23
백준 1085번 직사각형에서 탈출 [C/C++]
1085번: 직사각형에서 탈출 한수는 지금 (x, y)에 있다. 직사각형의 왼쪽 아래 꼭짓점은 (0, 0)에 있고, 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오. www.acmicpc.net 문제는 간단합니다. x,y좌표를 기준으로 상하좌우로 가장 가까운 곳을 찾으면 됩니다. 코드1 #define _CRT_SECURE_NO_WARNINGS #include int main() { int x, y, w, h; int distance; int distance2; scanf("%d %d %d %d", &x, &y, &w, &h); if (w - x < x) distance = w - x; else distance = x; if (h - y < ..
2021.01.22