반응형

C/백준알고리즘 38

[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]; ..

[C] 백준알고리즘 #8958 OX퀴즈

OX퀴즈의 점수를 구하는 문제이다 단순히 O의 개수를 구하는 문제가 아니라 O가 연속될수록 점수가 1점 2점 3점... 으로 늘어나기 때문에 주의해야 한다. 먼저 입력조건에 80보다 작다고 했으니 80의 크기를 가진 배열을 생성해준다. 각 점수를 넣을 score 변수와 점수를 합할 sum변수도 만들어준다. #include #include int main() { int n; int score, sum; char str[80]; scanf_s("%d", &n); for (int i = 0; i < n; i++) { sum = 0; score = 0; scanf_s("%s", str, 80); for (int j = 0; j < strlen(str); j++) { if (str[j] == 'O') { scor..

[C] 백준알고리즘 #1546 평균

n개의 정수를 입력받고 각 수들을 x / 최대값 x 100으로 바꾼 후 평균을 구하는 문제이다. 먼저 n개의 정수를 저장하기 위한 배열을 만든다 이 때 입력조건에서 이 값은 1000보다 작다 로 되어있으므로 배열의 크기를 a[1000]으로 지정한다. 최대값을 저장할 max변수 총점을 저장할 sum변수 평균값을 저장할 avg변수를 만드는데 sum변수와 avg 변수는 소수점 아래까지 표기해야하므로 자료형을 double로 지정한다. for문을 이용하여 n개의 값을 입력받아 a[ ] 배열에 차례대로 저장한 후 max와 비교하여 최대값을 저장해둔다. 그 후 다시 for문을 이용하여 각 a[ ]의 원소들을 조건에 맞게 /최대값 x 100 으로 저장한다. (이 값들이 소수점 아래까지 표시되므로 배열선언도 double..

[C] 백준알고리즘 #3052 나머지

정수 10개를 입력받아 이를 42로 나눈 나머지 중 서로 다른 수가 몇개인가를 구하는 문제이다. 어떤 수를 42로 나누면 나머지가 0~41까지 나올 수 있으므로 이를 저장하는 배열 a[42]를 만들어 놓은 후 나머지가 n이라면 a[n]의 수를 1 증가시키는 방법으로 0부터 41까지의 나머지를 찾을 수 있겠다. 여기서는 서로 다른 수의 갯수를 찾는 것이므로 a[n]이 1이 아닌경우에만 1을 넣어주고 모든 수를 입력 받은 후에는 for문을 이용하여 a[ ] 배열에서 값이 1인 것들만 찾아서 카운트해주면 된다. #include int main() { int n; int a[42] = { 0 }; int count = 0; for (int i = 1; i

반응형