백준 5073번: 삼각형과 세 변
문제
삼각형의 세 변의 길이가 주어질 때 변의 길이에 따라 다음과 같이 정의한다.
- Equilateral : 세 변의 길이가 모두 같은 경우
- Isosceles : 두 변의 길이만 같은 경우
- Scalene : 세 변의 길이가 모두 다른 경우
단 주어진 세 변의 길이가 삼각형의 조건을 만족하지 못하는 경우에는 "Invalid" 를 출력한다. 예를 들어 6, 3, 2가 이 경우에 해당한다. 가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 길지 않으면 삼각형의 조건을 만족하지 못한다.
세 변의 길이가 주어질 때 위 정의에 따른 결과를 출력하시오.
입력
각 줄에는 1,000을 넘지 않는 양의 정수 3개가 입력된다. 마지막 줄은 0 0 0이며 이 줄은 계산하지 않는다.
출력
각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오.
#include <stdio.h>
void triangle(a, b, c, max);
int get_max(a, b, c, max);
void main()
{
int a, b, c;
scanf_s("%d %d %d", &a, &b, &c);
int max = 0;
while (a != 0 && b != 0 && c != 0) {
max = get_max(a, b, c, max);
triangle(a, b, c, max);
scanf_s("%d %d %d", &a, &b, &c);
}
}
int get_max(a, b, c, max)
{
if (a > b)
if (a > c) {
max = a;
}
else {
max = c;
}
else {
if (b > c) {
max = b;
}
else {
max = c;
}
}
return max;
}
void triangle(a, b, c, max)
{
if (max < ((a + b + c) - max))
{
if (a == b && a == c) {
printf("Equilateral \n");
}
else if (a == b && a != c || a == c && a != b || b == c && b != a)
{
printf("Isosceles \n");
}
else
{
printf("Scalene \n");
}
}
else
{
printf("Invalid \n");
}
}
3일동안 풀었다.. 풀고나니 내가 관계연산자와 논리연산자를 잘못 주어서 풀지 못하고 있었다..
근데 백준에다 저 코드를 입력하면 런타임에러가 뜬다...
백준 10872번: 팩토리얼
문제
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N(0 ≤ N ≤ 12)가 주어진다.
출력
첫째 줄에 N!을 출력한다.
#include <stdio.h>
int main() {
int n;
scanf_s("%d", &n);
int res=1;
for (int i = n; i > 0; i--) {
res = res * i;
}
printf("%d", res);
return 0;
}
위에는 내가 직접 푼 코드이다.
재귀함수를 이용해서 풀면
#include <stdio.h>
int multiply(num) {
if (num > 1) {
return num * multiply(num - 1);
}
else
return 1;
}
int main() {
int n;
scanf_s("%d", &n);
printf("%d \n", multiply(n));
return 0;
}
백준 2576번: 홀수
문제
7개의 자연수가 주어질 때, 이들 중 홀수인 자연수들을 모두 골라 그 합을 구하고, 고른 홀수들 중 최솟값을 찾는 프로그램을 작성하시오.
예를 들어, 7개의 자연수 12, 77, 38, 41, 53, 92, 85가 주어지면 이들 중 홀수는 77, 41, 53, 85이므로 그 합은
77 + 41 + 53 + 85 = 256
이 되고,
41 < 53 < 77 < 85
이므로 홀수들 중 최솟값은 41이 된다.
입력
입력의 첫째 줄부터 일곱 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100보다 작다.
출력
홀수가 존재하지 않는 경우에는 첫째 줄에 -1을 출력한다. 홀수가 존재하는 경우 첫째 줄에 홀수들의 합을 출력하고, 둘째 줄에 홀수들 중 최솟값을 출력한다.
#include <stdio.h>
int main() {
int list[7];
int sum = 0, min = 100;
for (int i = 0; i < 7; i++) {
scanf_s("%d", &list[i]);
}
for (int i = 0; i < 7; i++) {
if (list[i] % 2 == 1) {
sum += list[i];
if (list[i] < min)
min = list[i];
}
}
if (sum == 0)
printf("-1");
else
printf("%d\n%d", sum, min);
return 0;
}
14번째 이후로는 코드를 모르겠어서 검색하여 풀었다...
조건문에서 조건식을 sum으로 줄 생각을 하지 못했었다...
#include <stdio.h>
int main() {
int arr[7];
int sum = 0, min = 100;
for (int i = 0; i < 7; i++) {
scanf_s("%d", &arr[i]);
if (arr[i] % 2 == 1) {
sum += arr[i];
if (arr[i] < min)
min = arr[i];
}
}
if (sum == 0)
printf("-1");
else
printf("%d\n%d", sum, min);
return 0;
}
멘토링 검사 후 수정한 코드이다.
'Mentoring' 카테고리의 다른 글
[멘토링][리눅스]overthewire : bandit Level 0→Level 1 (3) | 2020.05.15 |
---|---|
[멘토링][리눅스]overthewire : Bandit Level 0 (0) | 2020.05.15 |
[멘토링][c언어]세 번째 수업 (0) | 2020.05.09 |
[멘토링][c언어]두 번째 수업 (0) | 2020.05.04 |
[멘토링][c언어]백준 2742번, 8393번 (0) | 2020.05.03 |