반응형

C 41

[C] 랜덤함수를 이용한 가위바위보 게임

랜덤함수를 사용해 위처럼 간단한 가위바위보 게임을 만들어 보도록 하자. 먼저 변수부터 생성한다. int com, me; int win = 0; int draw = 0; int lose = 0; int check = 0; char *chcom = ""; char *chme = ""; 내가 입력할 값과 컴퓨터의 값을 저장할 me와 com 이기고 지고 비기는 결과를 저장할 win, draw, lose 변수 컴퓨터와 나의 대결 결과를 구분해줄 check변수, 컴퓨터와 내가 가위 바위 보 중 어떤 것을 냈는지 보여줄 chcom, chme 변수 등이 있겠다. 먼저 rand함수를 이용해서 com에 1부터 3까지 임의의 수를 저장해준다. 그리고 내가 내는 값을 me변수에 저장한다. while문을 이용하여 계속 반복할 ..

C/실습 2021.04.13

[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] 랜덤함수를 이용한 로또번호 생성기

지난번에 사용했던 랜덤함수를 사용하여 로또번호를 생성해보도록 하자. int n[6] = { 0 }; int tmp; int con = 0; 먼저 변수는 6개의 숫자를 저장할 배열을 생성한다 tmp는 오름차순으로 정렬할 때 임시로 숫자를 저장해 둘 변수이다. con은 계속 진행할 지 아닌지를 판단하는 변수이다. srand(time(NULL)); for (int i = 0; i < 6; i++) { n[i] = rand() % 45 + 1; for (int j = 0; j < i; j++) { while (1) { if (n[j] == n[i]) { n[i] = rand() % 45 + 1; } else break; } } } 다음은 for문을 이용하여 6개의 번호를 차례대로 n배열에 저장한다. 그리고 n ..

C/실습 2021.01.22

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

반응형