전체 글 36

백준 1358번 하키 [C언어]

문제 출처: https://www.acmicpc.net/problem/1358 1358번: 하키 첫째 줄에 수 W H X Y P가 주어진다. P는 선수의 수이다. W와 H는 100보다 작거나 같은 자연수이고, H는 짝수이다. X와 Y는 절댓값이 100보다 작거나 같은 정수이다. P는 최대 50인 자연수이다. 둘째 줄부 www.acmicpc.net Sol) #include #include int main(){ int width, height, x, y, player_num; int radius, player_x, player_y, cnt = 0; scanf("%d %d %d %d %d", &width, &height, &x, &y, &player_num); radius = height / 2; while(..

BOJ 2022.08.30

유클리드 호제법(Euclidean algorithm)

유클리드 호제법(유클리드 알고리즘)은 두 수의 최대공약수를 구하는 알고리즘이다. 최대 공약수를 구하기 전에, 먼저 약수란 무엇인지 그 정의를 정확히 알고 갈 필요가 있다. - 약수의 정의 두 수 A, B가 모두 정수일 때, A가 B의 약수라는 말은 B = A * k(k는 정수)라는 말과 동일하다. 즉, A가 B의 약수라는 말은 정수 B가 정수 A로 나누어 떨어진다는 말이다. 위와 같은 정의를 이용하면, 그 크기가 작은 수들의 경우 단순 계산으로 손쉽게 최대공약수를 구할 수 있다. 하지만, 두 수의 크기가 커지면 커질수록 단순 계산으로 구하기가 점점 어려워진다. 유클리드 호제법을 이용하면 이러한 큰 수들의 최대공약수도 쉽게 구할 수 있다. 정수 A와 B가 있다고 하자(A > B). 유클리드 호제법에 따르면..

Algorithm 2022.08.29

백준 1934번 최소공배수 [C언어]

문제 출처: https://www.acmicpc.net/problem/1934 1934번: 최소공배수 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있 www.acmicpc.net Sol) #include int main(){ int tc; int num1, num2, gcd, lcm; scanf("%d", &tc); while(tc--){ scanf("%d %d", &num1, &num2); int bigger = num1 > num2 ? num1 : num2; int smaller = num2 > num1 ? num1 : num2; int..

BOJ 2022.08.29

백준 3053번 택시 기하학 [C언어]

문제 출처: https://www.acmicpc.net/problem/3053 3053번: 택시 기하학 첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다. www.acmicpc.net Sol) #include #define _USE_MATH_DEFINES //math 헤더파일에 정의돼 있는 파이값을 사용하기 위해 필요. #include int main(){ double radius; scanf("%lf", &radius); printf("%lf\n", M_PI * radius * radius); printf("%lf\n", 2 * radius * radius); return 0; } 풀이..

BOJ 2022.08.29

정수 자료형의 저장 방식과 scanf함수 사용시 주의할 점

오늘 백준 문제를 풀고 코드를 이리저리 만져보다 발견한 주의점이다. 해당 문제: https://csloth.tistory.com/24 백준 2420번 사파리 월드 [C언어] 문제 출처: https://www.acmicpc.net/problem/2420 2420번: 사파리월드 첫째 줄에 두 도메인의 유명도 N과 M이 주어진다. (-2,000,000,000 ≤ N, M ≤ 2,000,000,000) www.acmicpc.net Sol) #include int main().. csloth.tistory.com C언어에서 정수 자료형의 저장 방식은 다음과 같다. 1. 2진수로 저장한다. 2. 어떤 한 자료형에서, 가장 왼쪽 비트는 부호 비트로 사용한다(0이면 양수, 1이면 음수로 판단). 3. 뺄셈, 혹은 음수..

Notes for C 2022.08.28

백준 2420번 사파리 월드 [C언어]

문제 출처: https://www.acmicpc.net/problem/2420 2420번: 사파리월드 첫째 줄에 두 도메인의 유명도 N과 M이 주어진다. (-2,000,000,000 ≤ N, M ≤ 2,000,000,000) www.acmicpc.net Sol) #include int main(){ long long s1, s2; long long diff; scanf("%lld %lld", &s1, &s2); diff = s1 >= s2 ? s1 - s2 : s2 - s1; printf("%lld\n", diff); return 0; } 풀이 방향 두 수의 차의 절댓값을 구하는 간단한 문제이다. 입력값의 제한범위는 int 범위 내이지만, 계산 결과가 int범위가 넘어갈 수 있으므로 두 수를 long l..

BOJ 2022.08.28

백준 3009번 네 번째 점 [C언어]

문제 출처: https://www.acmicpc.net/problem/3009 3009번: 네 번째 점 세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오. www.acmicpc.net Sol) #include int main(){ int x[3]; int y[3]; int ans_x, ans_y; for(int i = 0; i < 3; i++){ scanf("%d %d", &x[i], &y[i]); } for(int j = 0; j < 3; j++){ if(x[j % 3] != x[(j + 1) % 3] && x[j % 3] != x[(j + 2) % 3]) ans_x = x[j % 3]; if(y[j % 3] != y[(j + 1) % 3] &..

BOJ 2022.08.25

백준 10163번 색종이 [C언어]

문제 출처: https://www.acmicpc.net/problem/10163 10163번: 색종이 평면에 색깔이 서로 다른 직사각형 모양의 색종이 N장이 하나씩 차례로 놓여진다. 이때 색종이가 비스듬하게 놓이는 경우는 없다. 즉, 모든 색종이의 변은 서로 평행하거나, 서로 수직이거나 둘 www.acmicpc.net Sol) #include typedef struct{ int x; int y; int width; int height; } paper; //색종이 하나의 왼쪽 아래 꼭짓점의 좌표와 크기를 저장할 구조체 int main() { int grid[1001][1001] = {0}; //색종이가 놓여질 판. 최대 1001 * 1001 int N; //종이 개수 scanf("%d", &N); pape..

BOJ 2022.08.22

백준 11098번 첼시를 도와줘! [C언어]

문제 출처: https://www.acmicpc.net/problem/11098 11098번: 첼시를 도와줘! 구단이 성적을 내지 못한다면 답은 새 선수 영입뿐이다. 이것은 오늘날 유럽 리그에서 가장 흔한 전략이고, 노르웨이의 로젠버그 팀은 이러한 전략이 성공한 대표적 예시다. 그들은 많은 스카 www.acmicpc.net Sol) #include #include int main() { int n, p; scanf("%d", &n); while(n--){ int price = 0; char name[21]; int max_price = 0; char ans[21]; scanf("%d", &p); for(int i = 0; i < p; i++){ scanf("%d %s", &price, name); if ..

BOJ 2022.08.22

백준 2447번 별 찍기 - 10 [C언어]

문제 출처: https://www.acmicpc.net/problem/2447 Sol) #include void star_re(int row, int column, int N){ if(N == 0) { //종료 조건 printf("*"); return; //return을 써 주지 않으면 아래 if문 조건에서 0으로 나누는 오류가 발생하게 된다. } if((row / N) % 3 == 1 && (column / N) % 3 == 1) printf(" "); else star_re(row, column, N / 3); } int main() { int N; scanf("%d", &N); for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ star_re(j, i..

BOJ 2022.08.21