목록백준 (161)
피너클의 it공부방
https://www.acmicpc.net/problem/1090 1090번: 체커 N개의 체커가 엄청 큰 보드 위에 있다. i번 체커는 (xi, yi)에 있다. 같은 칸에 여러 체커가 있을 수도 있다. 체커를 한 번 움직이는 것은 그 체커를 위, 왼쪽, 오른쪽, 아래 중의 한 방향으로 한 칸 www.acmicpc.net 완전탐색을 이용했다. n = 5라면 처음에는 체커 1개가 같은 칸에 모이도록 체커를 움직이는 횟수 두번째에는 체커 2개가 같은 칸에 모이도록 체커를 움직이는 횟수 이런식으로 출력하면 된다. 처음에는 문제를 이해 못해서 헤맸다. int n; vector v; vector coord; 사용할 변수다. coord에는 체커끼리 만나는 좌표가 들어간다. cin >> n; for (int i = ..
https://www.acmicpc.net/problem/1005 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 다이나믹 문제다. 1년전에 풀어져있어 코드를 봤는데 위상정렬 없이도 풀어져있었다. int n, k, w; long long delay[1001]; bool firstBuild[1001]; vector v[1001]; int cache[1001]; 사용할 변수다. delay[5] = 5라면 5번 건물을 지을때 5만큼 시간이 든다는 것이다. firstBuild[5] = true라면 5번 건물은 ..
https://www.acmicpc.net/problem/1075 1075번: 나누기 첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. F는 100보다 작거나 같은 자연수이다. www.acmicpc.net 완전탐색으로 풀었다. string n; int f; n은 string으로 받을것이다. cin >> n >> f; int num = 0; for (int i = 0; i < n.length() - 2; i++) num = num * 10 + (n[i] - '0'); n과 f을 입력받은뒤 int num에 n을 입력한다. 이때 맨 뒤 2자리는 제외하고 입력한다. for (int i = 0; i < 100; i++) { int ans..
https://www.acmicpc.net/problem/1027 1027번: 고층 건물 세준시에는 고층 빌딩이 많다. 세준시의 서민 김지민은 가장 많은 고층 빌딩이 보이는 고층 빌딩을 찾으려고 한다. 빌딩은 총 N개가 있는데, 빌딩은 선분으로 나타낸다. i번째 빌딩 (1부터 시작) www.acmicpc.net 수학문제다. 대충 위와 같이 빌딩들이 있다고 가정하자. 선분으로 하니 잘 안보여서 그냥 도형으로 했다. 첫번째 건물에서 두번째 건물은 당연히 보인다. 세 번째 건물은 당연히 보이지 않는걸 알수있다. 그렇다면 이걸 코드로 어떻게 작성해야할까. 각 선분의 기울기를 확인하면 된다. 이전 건물까지의 기울기보다 이번 건물의 기울기가 작다면 이번 건물은 보이지 않는다. 반대로 더 크다면 이번 건물은 보이게 ..
https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 구현문제다. int n; char stars[10001][10001]; char first[3][3] = {{'*', '*', '*'}, {'*', ' ', '*'}, {'*', '*', '*'}}; 전체 별을 담을 stars와 초기 별의 모음인 first를 준비해준다. memset(stars, ' ', sizeof(stars)); for(int i = 0; i < 3;..
https://www.acmicpc.net/problem/25305 25305번: 커트라인 시험 응시자들 가운데 1등은 100점, 2등은 98점, 3등은 93점이다. 2등까지 상을 받으므로 커트라인은 98점이다. www.acmicpc.net 간단한 구현문제다. #include #include using namespace std; int n, k; int arr[1001]; int main() { cin >> n >> k; for(int i = 0; i > arr[i]; sort(arr, arr + n); cout
https://www.acmicpc.net/problem/1004 1004번: 어린 왕자 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주 www.acmicpc.net 기하학 문제다. 출발점과 도착점이 각각 원 안에 있는지를 확인하면 된다. double dist(double x_1, double y_1, double x_2, double y_2) { return sqrt(pow(x_1 - x_2, 2) + pow(y_1 - y_2, 2)); } dist함수는 좌표를 전달했을때 각 점 간의 거리를 반환한다. int test; cin >> test; ..
https://www.acmicpc.net/problem/1002 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다. www.acmicpc.net 기하학문제다. 터렛의 좌표와 거리가 주어졌을때 류재명이 있을수 있는 위치의 개수를 출력해야한다. 이때 크게 3가지 경우가 있다. 1. 두 터렛이 만나지 않는 경우 2. 두 터렛이 한번만 만나는 경우 3. 두 터렛이 두번 만나는 경우 int test; cin >> test; while (test-- > 0) { cin >> x_1 >> y_1 >> r_1 >> x_2 >> y_2 >> r_2; double dist = sqrt(pow(x_1 - x_2..
https://www.acmicpc.net/problem/2083 2083번: 럭비 클럽 입력 받은 각 회원에 대해 이름과 분류를 출력한다. 성인부 회원이면 'Senior', 청소년부 회원이면 'Junior'를 출력한다. www.acmicpc.net 간단한 구현문제다. #include #include #include using namespace std; string name; int age, weight; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); while (true) { cin >> name >> age >> weight; if (name == "#" && age == 0 && weight == 0) break; if (age > ..
https://www.acmicpc.net/problem/25421 25421번: 조건에 맞는 정수의 개수 2개의 자릿수를 갖고 첫 번째 자리의 숫자와 두 번째 자리의 숫자의 차이가 2보다 작거나 같은 양의 정수 11, 12, 13, 21, 22, 23, 24, 31, 32, ... , 97, 98, 99가 A에 해당된다. 따라서 정답은 39이다. www.acmicpc.net 다이나믹 문제다. 탑다운으로 풀려고 했지만 함수 호출량이 너무 많은거 같아 바텀업으로 풀게됬다. int n; long long dp[10][100001]; long long MOD = 987654321; 사용할 변수다. cin >> n; memset(dp, 0, sizeof(dp)); long long ans = 0; for (in..