이 포스트에서는 프로그래밍 문제 사이트 백준 Online Judge의 Bronze IV 문제들 중 외국어 문제들을 위주로 풀이할 것입니다.
난이도가 Bronze IV로 풀이가 매우 간단하기에 풀이 코드와 간단한 해설만 첨언할 것입니다.
20353번 : Atrium
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
double a;
scanf("%lf", &a);
printf("%.7lf", sqrt(a)*4);
}
정사각형의 면적이 주어질 때 정사각형의 둘레를 출력하는 문제입니다.
20232번 : Archivist
#include <cstdio>
using namespace std;
int main() {
int n;
scanf("%d", &n);
if(n == 1996 || n == 1997 || n == 2000 || n == 2007 || n == 2008
|| n == 2013 || n == 2018) printf("SPbSU");
else if(n == 2006) printf("PetrSU, ITMO");
else printf("ITMO");
}
연도가 주어지면 그 해 우승자를 출력하는 노가다 문제입니다.
ITMO가 대부분이므로 SPbSU인 경우만 if 조건문으로 처리해주고 나머지는 else로 처리하면 수월합니다.
21185번 : Some Sum
#include <cstdio>
using namespace std;
int main() {
int N;
scanf("%d", &N);
if(N%4 == 0) printf("Even");
else if(N%4 == 2) printf("Odd");
else printf("Either");
}
연속된 N개의 자연수의 합이 짝수인지, 홀수인지, 둘 다일 수 있는지 출력하는 문제입니다.
N이 4의 배수이면 무조건 짝수이고, 4k+2이면 무조건 홀수이며, 그 외에는 둘 다 가능합니다.
21612번 : Boling Water
#include <cstdio>
using namespace std;
int main() {
int B, Ans;
scanf("%d", &B);
Ans = 5*B-400;
printf("%d\n", Ans);
if(Ans > 100) printf("-1");
else if(Ans < 100) printf("1");
else printf("0");
}
주어진 식대로 끓는 점을 계산하고, 이것이 100을 넘냐 안 넘냐에 따라 1, 0, -1을 출력하면 되는 문제입니다.
20233번 : Bicycle
#include <cstdio>
using namespace std;
int main() {
int a, x, b, y, T;
scanf("%d %d %d %d %d", &a, &x, &b, &y, &T);
if(T <= 30) printf("%d ", a);
else printf("%d ", a+(T-30)*x*21);
if(T <= 45) printf("%d ", b);
else printf("%d ", b+(T-45)*y*21);
}
문자와 값 사이의 적절한 관계식을 찾아서 조건문을 설정하여 각 요금을 출력해주면 되는 문제입니다.
20352번 : Circus
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
double Area;
scanf("%lf", &Area);
printf("%.7lf", sqrt(Area/3.14159265358979)*2*3.14159265358979);
}
원형 천막의 넓이가 주어졌을 때 그 둘레를 구하는 문제입니다.
double 형의 경우 pi값 대입할 때 오차가 발생할 수 있으므로 최대한 긴 자리를 넣어주는 것이 좋습니다.
21591번 : Laptop Sticker
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
int a1, b1, a2, b2;
scanf("%d %d %d %d", &a1, &b1, &a2, &b2);
if(a1-a2 >= 2 && b1-b2 >= 2) printf("1");
else printf("0");
}
스티커를 붙였을 때 상하좌우로 1cm 이상의 여백이 있냐는 문제입니다.
가로, 세로 차가 모두 2cm 이상 나오면 되므로 검사해주면 됩니다.
20215번 : Cutting Corners
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%.7lf", a+b-sqrt(a*a+b*b));
}
가로, 세로를 따라서 자르는 것이 대각선으로 자르는 것보다 얼마나 더 긴지 출력하는 문제입니다.
피타고라스 정리 써서 .7lf 정도로 출력해주면 됩니다.
23825번 : SASA 모형을 만들어보자
#include <cstdio>
using namespace std;
int main() {
int a, b;
scanf("%d %d", &a, &b);
if(a < b) printf("%d", a/2);
else printf("%d", b/2);
}
입력받은 두 정수 중 작은 것의 절반 값을 출력해주면 됩니다.
22015번 : 金平糖 (Konpeito)
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int Arr[3];
scanf("%d %d %d", &Arr[0], &Arr[1], &Arr[2]);
sort(Arr, Arr+3);
printf("%d", Arr[2]-Arr[0] + Arr[2]-Arr[1]);
}
세 수 정렬해서 최댓값에서 나머지 둘을 뺀 합을 출력해주면 됩니다.
21335번 : Another Eruption
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
double Area;
scanf("%lf", &Area);
printf("%.7lf", sqrt(Area/3.14159265358979)*2*3.14159265358979);
}
위의 Circus 문제와 완전히 동일합니다.
주어진 원의 넓이에 대해 원의 둘레를 출력하는 문제입니다.
21633번 : Bank Transfer
#include <cstdio>
using namespace std;
int main() {
double K, Ans;
scanf("%lf", &K);
Ans = (double)K/100 + 25;
if(Ans < (double)100) printf("%.3lf", (double)100);
else if(Ans > (double)2000) printf("%.3lf", (double)2000);
else printf("%.3lf", Ans);
}
규칙에 따라 수수료가 얼마인지 계산하는 문제입니다.
최소 금액도 정해져 있으므로 조심해야하고, 100을 출력할 때도 double로 바꿔서 출력해주어야 제대로 출력이 됩니다.
21638번 : SMS from MCHS
#include <cstdio>
using namespace std;
int main() {
int a, b, c, d;
scanf("%d %d %d %d", &a, &b, &c, &d);
if(c < 0 && d >=10) printf("A storm warning for tomorrow! Be careful and stay home if possible!");
else if(c < a) printf("MCHS warns! Low temperature is expected tomorrow.");
else if(d > b) printf("MCHS warns! Strong wind is expected tomorrow.");
else printf("No message");
}
문제에서 주어진대로 조건식을 작성하여 출력문을 출력하는 문제입니다.
값이 4개이고 조건문이 4개나 되므로 헷갈리지 않도록 주의합니다.
21354번 : Äpplen och päron
#include <cstdio>
using namespace std;
int main() {
int a, b;
scanf("%d %d", &a, &b);
if(7*a > 13*b) printf("Axel");
else if(7*a < 13*b) printf("Petra");
else printf("lika");
}
사과 가격은 7, 배 가격은 13이라고 할 때 두 판매량이 주어지면 어느 쪽이 더 많이 벌었는지 출력하는 문제입니다.
21631번 : Checkers
#include <cstdio>
using namespace std;
int main() {
long long a, b;
scanf("%lld %lld", &a, &b);
if(a < b) printf("%lld", a+1);
else printf("%lld", b);
}
검은색 블럭이 2개 이상 붙어있으면 하나의 검은색 줄무늬로 셀 때, 검은색 무늬의 최댓값을 구하는 문제입니다.
a와 b의 대소 관계에 의해 답이 바뀌므로 조건문을 이용해주면 되고, 이 때 입력 범위가 int형 범위를 넘어가므로 long long으로 입출력을 해주어야 합니다.
6810번 : ISBN
#include <cstdio>
using namespace std;
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
printf("The 1-3-sum is %d", 9*1 + 7*3 + 8*1 + 0*3 + 9*1 + 2*3 + 1*1 + 4*3 + 1*1 + 8*3 + a*1 + b*3 + c*1);
}
주어진 ISBN 공식에 값을 대입해서 출력하는 노가다 계산 문제입니다.
식이 길어서 그렇지 앞의 10자리는 고정이므로 생각보다 어렵지는 않습니다.
Bronze IV 티어에서 풀 수 있는 문제들은 이 정도인 것 같습니다.
다른 문제들은 10^100 정도의 수를 요구하여 C로 풀기는 어렵거나, 언어를 번역하여 해석하기에 무리가 있었습니다.
'알고리즘 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[C++ 백준 풀이][Bronze III] 기초 연산 20문제 간단 풀이 (2) (0) | 2021.12.16 |
---|---|
[C++ 백준 풀이][Bronze III] 기초 연산 20문제 간단 풀이 (1) (0) | 2021.12.15 |
[C++ 백준 풀이][Bronze IV] 20499, 19698, 18408, 19602, 21598, 18411, 18414, 20673, 20976, 18330번 풀이 (0) | 2021.12.15 |
[C++ 백준 풀이][Gold II] 1516번 : 게임 개발 / 2056번 : 작업 (Topological Sort) (0) | 2021.12.15 |
[백준] Solved.ac 플레티넘 티어 달성과 후기 (0) | 2021.12.15 |