이번 알고리즘 문제 풀이는 C로 진행했습니다
코드에 오탈자나 문제가 있으면 언제든지 댓글로 알려주세요!
A. 입출력과 사칙 연산
1. Hello World! 출력하기
a. 문제지 : 2557
b. 정답
1) 출력함수 printf()로 해결하는 방법
📚 풀이 1 : printf 함수로 Hello World! 출력하기
#include <stdio.h>
int main() {
printf("Hello World!");
return 0; //프로그램이 정상적으로 종료되었음을 나타냄
}
2) iostream 사용
📚 풀이 2 : iostream으로 Hello World! 출력하기
#include <iostream> //표준 라이브러리 헤더 iostream를 사용
int main() {
std::cout << "Hello, World!" << std::endl; //출력에 std::cout 스트림을 사용
// << 연산자로 문자열을 출력
// std::end1로 문자를 출력하고 버퍼를 비움
return 0;
}
2~4. 덧셈 뺄셈 곱셈
a. 문제지 : 1000, 1001, 10998
b. 정답
1) 출력함수 printf()로 해결하는 방법
📚 풀이 1 : printf 함수로 연산값 출력하기
#include <cstdio>
int main() {
int A, B;
scanf("%d %d", &A, &B);
int sum = A + B;
printf("%d", sum);
return 0;
}
2) iostream 사용
📚 풀이 2 : iostream으로 연산값 출력하기
#include <iostream>
int main() {
int A, B;
std::cin >> A >> B; //사용자 입력
int sum = A + B;
std::cout << sum << std::endl; //결과 출력
return 0;
}
👉 뺄셈, 곱셈은 수식만 바꿔주자
5. 나눗셈
a. 문제지: 1008
b. 알고리즘
✔ A, B의 조건이 있다는 점
✔ 상대 오차의 범위가 있다는점을 생각하고 문제풀이를 해야 함
상대 오차의 범위때문에 자료형에 대한 이해가 필요한 문제!
1/3처럼 무한 소수를 유한개의 비트로 나타내기 위해서 실수 근사 방식을 사용하는데,
근사값을 표현하다 보니 오차가 날수밖에 없음
오차를 줄이기 위해서 최대한 많은 비트를 쓸 수 있는 자료형을 선택해야 하지만
이 번 문제에서는 오차가 10-9 이하 즉, 소수점 자리를 10개 부터는 오차를 허용함
실수형 자료형은 float(32비트), double(64비트) 두가지가 있는데 (혹은 long double)
대략적으로 float 가 소수 부분 6자리까지, double은 15자리까지 오차없이 표현하므로 double을 사용해야 하고
출력시 double 자료형은 기본 출력 형식이 소수점 아래 6자리까지 이므로 %.10f이상으로 꼭 지정해야 함!
c. 정답
1) 출력함수 printf()로 해결하는 방법
📚 풀이 1 : printf 함수로 연산값 출력하기
#include <cstdio>
int main() {
int A, B; //만약 int가 아닌 double로 설정한다면 아래 scanf의 서식지정자도 %lf로 변경해야 함
scanf("%d %d", &A, &B);
if (A > 0 && B < 10) { //조건 설정해주기
double result = (double)A / B;
printf("%.13f", result); //최소 10개 이상
} else {
scanf("%d %d", &A, &B);
}
return 0;
}
2) iostream 방식으로 해결하기
cin, cout 을 사용할 경우 입력은 문제가 없지만, 소수점 자리를 고정해 출력하려면 두가지를 알아야 함
📘 문법
std::fixed // 소수점 아래로 고정
std::cout.precision(n); // 실수 전체 자리수 중 n자리 까지 표현
🤓 예제 : fixed와 precision 차이점 알기
double a = 3333.333333;
std::cout.precision(6);
std::cout << a; // 3333.33 이 출력됨
std::cout << std::fixed; // 고정 소수점 표기로 전환
std::cout << a; // 3333.333333 이 출력 됨
std::cout.unsetf(ios::fixed); // 고정 소수점 표기 해제
std::cout << a; // 3333.33 이 출력됨
❕ 따라서 아래와 같은 결과가 나온다
📚 풀이 2 : iostream 방법으로 출력하기
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]) {
double a, b;
cin >> a >> b;
cout.precision(12);
cout << fixed;
cout << a / b;
return 0;
}
문제 풀이 출처 : https://st-lab.tistory.com/212
6. 모든 사칙 연산
a. 문제지 : 10869
b. 정답
📚 풀이 : printf 함수로 출력하기
#include <stdio.h>
int main() {
int A, B;
scanf("%d %d", &A, &B);
if (A >= 1 && A <= 10000 && B >= 1 && B <= 10000) { //조건 추가
int sum = A + B;
int difference = A - B;
int product = A * B;
int quotient = A / B;
int remainder = A % B;
printf("%d\n", sum);
printf("%d\n", difference);
printf("%d\n", product);
printf("%d\n", quotient);
printf("%d\n", remainder);
} else {
}
return 0;
}
7. 입출력을 응용
a. 문제지 : 10926
b. 정답
📚 풀이 : printf 함수로 출력하기
#include <stdio.h>
#include <string.h>
int main(){
char A[100]; //문자열을 저장할 배열로 선언
scanf("%s", &A);
char str1[] = "??!"; //문자열을 저장할 배열로 선언 및 초기화
strncat(A, str1, 100); //strcat(A, str1); 사용도 가능
printf("%s\n", A); //문자열을 출력할 형식 지정자 %s를 사용
return 0;
}
8. 식을 직접 세워서 계산하는 문제
a. 문제지 : 18108
b. 정답
📚 풀이 : printf 함수로 출력하기
#include <stdio.h>
int main(){
int year, newYear;
scanf("%d", &year); //year 변수에 입력값을 저장
if((year>=1000)&&(year<=3000)){
newYear = year-543;
printf("%d\n", newYear); //%d 형식 지정자를 사용하여 newYear 변수의 값을 출력
}
return 0;
}
9. 나머지
a. 문제지 : 10430
b. 정답
📚 풀이 : printf 함수로 출력하기
#include <stdio.h>
int main() {
int A, B, C;
scanf("%d %d %d", &A, &B, &C);
if (A >= 2 && B >= 2 && C >= 2 &&
A <= 10000 && B <= 10000 && C <= 10000) {
printf("%d\n", (A + B) % C);
printf("%d\n", ((A % C) + (B % C)) % C);
printf("%d\n", (A * B) % C);
printf("%d\n", ((A % C) * (B % C)) % C);
}
return 0;
}
10. 곱셈
a. 문제지 : 2588
b. 정답
📚 풀이 : printf 함수로 출력하기
#include <stdio.h>
int main() {
int A, B;
scanf("%d %d", &A, &B);
if (A >= 100 && B >= 100 && A < 1000 && B < 1000) {
int newB1 = B % 10;
int newB2 = (B / 10) % 10; // 일의 자리 제거하고 십의 자리 추출
int newB3 = B / 100;
printf("%d\n", A * newB1);
printf("%d\n", A * newB2);
printf("%d\n", A * newB3);
printf("%d\n", A * B);
}
return 0;
}
11. 꼬마 정민
a. 문제지 : 11382
b. 알고리즘
C 언어에서 10의 12제곱을 표현할 때에는 두가지 방법이 있음
1) 지수 표기법
10의 12제곱은 1 뒤에 12개의 0이 온 수 즉, 지수 표기법을 사용해서 1e12로 표현
#include <stdio.h>
int main() {
long long number = 1e12;
printf("10^12 = %lld\n", number);
return 0;
}
2) pow 함수 활용
math.h 헤더 파일에 정의된 pow 함수를 사용하여 10의 12제곱을 계산
#include <stdio.h>
#include <math.h>
int main() {
double number = pow(10, 12);
printf("10^12 = %lf\n", number);
return 0;
}
👉 두 방법 중 첫 번째 방법을 사용해 풀이함!
C. 정답
📚 풀이 : printf 함수로 출력하기
#include <stdio.h>
int main() {
long long A, B, C;
scanf("%lld %lld %lld", &A, &B, &C); // %lld 사용하여 long long 입력 받음
long long number = 1e12;
if (A >= 1 && A <= number &&
B >= 1 && B <= number &&
C >= 1 && C <= number) {
printf("%lld\n", A + B + C); // %lld 사용하여 long long 출력
}
return 0;
}
12, 13. 고양이 / 강아지
a. 문제지 : 10171, 10172
이스케이프 시퀀스를 정확하게 알아야 풀이 가능!
b-1. 정답 : 고양이
📚 풀이 : 고양이
#include <stdio.h>
int main() {
printf("\\ /\\\n");
printf(" ) ( ')\n");
printf("( / )\n");
printf(" \\(__)|\n");
return 0;
}
b-2. 정답 : 강아지
📚 풀이 : 강아지
#include <stdio.h>
int main(){
printf("|\\_/|\n");
printf("|q p| /}\n");
printf("( 0 )\"\"\"\\\n");
printf("|\"^\"` |\n");
printf("||_/=\\\\__|\n");
return 0;
}
'자료구조와 알고리즘 > 문제풀이' 카테고리의 다른 글
[Baekjoon] 단계별로 풀어보기 : 심화 1 (0) | 2023.08.24 |
---|---|
[Baekjoon] 단계별로 풀어보기 : 문자열 (0) | 2023.08.17 |
[Baekjoon] 단계별로 풀어보기 : 1차원 배열 (0) | 2023.08.16 |
[Baekjoon] 단계별로 풀어보기 : 반복문 (0) | 2023.08.16 |
[Baekjoon] 단계별로 풀어보기 : 조건문 (0) | 2023.08.16 |