반응형

백준알고리즘 129

[Java] 백준알고리즘 #3009 네 번째 점

세 점을 입력받고 축에 평행한 직사각형을 만들기 위해 마지막 한 점을 구하는 문제이다. 먼저 각 점들의 x, y 좌표를 나누어 입력받는다. int ax, ay, bx, by, cx, cy; ax = sc.nextInt(); ay = sc.nextInt(); bx = sc.nextInt(); by = sc.nextInt(); cx = sc.nextInt(); cy = sc.nextInt(); 축에 평행한 직사각형을 만들기 때문에 위 세 점은 각각 x좌표나 y좌표가 하나씩은 일치하는 부분이 있다. 따라서 네 점을 구했을 때 같은 x좌표가 같은것이 2개, y좌표가 같은것이 2개씩 있어야 한다. 이를 이용해 if문을 사용하여 코드를 작성해보면 다음과 같다. import java.util.Scanner; publ..

[Java] 백준알고리즘 #2775 부녀회장이 될테야

위와 같은 조건을 가진 아파트에 a층 b호에 사는 사람의 수는 몇명인지 구하는 문제이다. a층의 b호에는 a-1층의 1호부터 b호까지 거주하는 사람들의 수의 합 만큼의 사람이 살고 있다. 이를 숫자로 나열해보면 0층 : 1 2 3 4 5 ... 1층 : 1 3 6 10 15 ... 2층 : 1 4 10 20 35 ... 3층 : 1 5 15 35 70 ... 4층 : 1 6 21 56 126 ... ... 이 될 것이다. 먼저 k와 n을 입력받고 이 범위만큼의 2차원 배열을 생성한다. int k, n; k = sc.nextInt(); n = sc.nextInt(); int[][] a = new int[k + 1][n + 1]; 배열은 0부터 시작하고, 이 아파트에는 0층이 있으므로 k+1, n+1 만큼의..

[C] 백준알고리즘 #1193 분수찾기

X가 주어졌을 때 X번째 분수를 구하는 문제이다. 규칙을 잘 살펴보면 위와 같은 순서대로 X의 번호가 진행됨을 알 수 있다. 각 대각선에 있는 수의 개수는 1,2,3...순으로 늘어나기 때문에 1부터 n까지 더했을 때 X보다 크지 않으면서 가장 가까운 수를 구한다. 이를 위해서 X가 0보다 작아질 때까지 1,2,3.. 순으로 뺄셈해준다. int ln = 0; while (n > 0) { ln++; n -= ln; } 이 결과의 ln변수는 x가 몇번째 대각선에 있는지 알려준다. 그리고 남아 있는 x는 음수 또는 0이 될 것이므로 다시 ln을 한번 더해주면 (ln)번째 줄의 몇번째 위치에 있는지 알 수 있다. 이를 count 변수에 저장해둔다. 이 ln 변수에 저장된 값이 짝수라면 위에서부터 왼쪽 아래로 내..

[C] 백준알고리즘 #2292 벌집

벌집의 중앙부터 각 방에 번호를 매긴 후 N번방 까지의 거리를 구하는 문제이다. 먼저 이 벌집의 규칙성부터 알아보자 가장 가운데에 1이 있고 각 방의 모양은 육각형이므로 1번방을 둘러싼 주위에는 6개의 방이 있다. 이 6개의 방에 2 ~ 7 까지의 번호를 매긴다. 다시 2 ~ 7 까지를 둘러싸는 방의 개수를 구한다. 이는 12개이다. 이 12개의 방에 8 ~ 19까지의 번호를 매긴다. .... 반복하게 되면 가장 안쪽의 1번방을 점이라 생각하고 각 방으로부터 점 까지의 거리 (자기자신도 포함) 는 2 ~ 7번방은 2 8 ~ 19번방은 3 20 ~ 38번방은 4 ... 6의 배수로 늘어남을 확인할 수 있다. 따라서 n번째 방의 거리는 n이 1보다 같거나 작아질 때까지 6, 12, 18... 6n까지 차례대..

[C] 백준알고리즘 #1712 손익분기점

고정 비용 A, 가변 비용 B, 제품 가격 C가 주어졌을 때 손익분기점을 구하는 문제이다. 단순 계산으로 놓고 봤을 때 가변 비용보다 제품 가격이 낮다면 언젠가는 이익이 나는 구간이 있고, 가변 비용이 제품 가격보다 높다면 손익분기점이 존재하지 않는다고 볼 수 있다. 따라서 B >= C 라는 조건일 경우에는 손익분기점이 존재하지 않으므로 -1을 출력하고 아닌 경우만 계산해주면 된다. 손익분기점이 존재한다면 (고정비용 + 가변비용) 보다 (제품 판매 수익금) 이 높아져야 하므로 (A+B*x) = (C*x) 가 되는 x를 구하면 된다. A = Cx - Bx A = (C-B)x x = (C-B) / A 가 되는 것을 알 수 있다. 다만 '/' 연산자는 나머지를 날려버리기 때문에 손익분기점보다 조금 못미치는 경..

[C] 백준알고리즘 #1065 한수

양의 정수 X를 입력받아 이 X의 각 자리수가 등차수열을 이루는지 판단하는 함수를 작성하는 문제이다. 먼저 X를 파라미터로 받는 함수를 han()이라고 한다. 각 자리수를 저장할 변수 a,b,c를 생성한다. 1 ~ 99 까지의 수는 모두 한수이고, 1000은 한수가 아니다. 이 조건식을 먼저 만들어준다. int a, b, c; //100자리, 10자리, 1자리 저장할 변수 if (i == 1000) { return 0; } else if (i < 100) { return 1; } 그리고 a b c 에 각 자리수를 입력해준다. a = i / 100; b = (i % 100) / 10; c = i % 10; 이제 100의자리에서 10의자리를 뺀 값(a - b)과 10의자리에서 1의자리를 뺀 값(b - c) ..

[C] 백준알고리즘 #15596 정수 N개의 합

정수 n개가 주어졌을 때 n개의 합을 구하는 함수를 구하는 문제이다. 먼저 제출을 누르면 다음과 같이 정답 양식이 나온다. long long sum(int *a, int n) { long long ans = 0; return ans; } 위 양식에 맞추어 함수를 만들어주면 되겠다. *a는 정수가 저장된 배열을 가리키는 포인터이고 n은 정수의 개수를 나타낸다. 따라서 long long sum(int *a, int n) { long long ans = 0; for (int i = 0; i < n; i++) { ans += a[i]; } return ans; } 위와같이 for문을 이용하여 파라미터로 전달받은 a배열에서 n개만큼 반복하여 ans에 더해주면 된다. 이를 이용하여 main함수도 만들어보자. #in..

[C] 백준알고리즘 #4344 평균은 넘겠지

학생들의 점수를 입력받아 평균을 넘는 학생들의 비율을 계산하는 문제이다. 먼저 변수부터 설정한다. int t, n; int stu[1000]; int count, sum; double avg, result; 테스트 케이스의 수를 입력받을 t변수 테스트케이스 별로 학생들의 수를 입력받을 n변수 학생의 수가 최대 1000명이므로 각 학생들의 점수를 저장할 배열 stu[1000] 평균값을 넘는 학생 수를 세는 count변수 학생들의 총합을 저장할 sum변수 sum변수를 이용해 평균값을 저장할 avg변수 count변수를 이용해 비율(결과)을 계산하기 위한 result 변수 이렇게 총 7개의 변수가 사용되었다. 전체 코드를 보자 #include int main() { int t, n; int stu[1000]; ..

반응형