일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 구현
- 초보
- 10807
- C Programming
- 10926
- 정리
- 설명
- Implemention
- 꾸준히
- Python
- greedy
- VS
- 알고리즘
- 백준
- 문제풀이
- 심화1
- HTML
- 친절한 설명
- 코드엔진
- C
- 문자열
- CSS
- C 언어
- 그리디
- 파이썬
- Beakjoon
- c언어
- 입문
- Baekjoon
- implement
- Today
- Total
안경잡이 구루루
백준 2480 (주사위 세개) [C programming] [VS/Visual Code] 본문
백준 2480 (주사위 세개) [C programming] [VS/Visual Code]
구루루(gururu) 2023. 11. 3. 15:07https://www.acmicpc.net/problem/2480
나:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a[3],i,j=0,totall = 0;
for (i = 0; i < 3; i++) {
scanf("%d", &a[i]);
if (a[i] > j) j = a[i];
}
if (a[0] == a[1] && a[0]==a[2] && a[1]==a[2]) totall = 10000 + a[0] * 1000;
else if (a[0] == a[1]) totall = 1000 + a[0] * 100;
else if (a[0] == a[2]) totall = 1000 + a[0] * 100;
else if (a[1] == a[2]) totall = 1000 + a[1] * 100;
else {
totall = j * 100;
}
printf("%d", totall);
return 0;
}
완성된 코드는 위와 같다.
우선 VS의 scanf() 오류를 막기위해 #define _CRT_SECURE_NO_WARNINGS 선언.
// #1
int a[3],i,j=0,totall = 0;
for (i = 0; i < 3; i++) {
scanf("%d", &a[i]);
if (a[i] > j) j = a[i];
}
입력값 세개를 받고 이들중에 가장 큰 수를 구하기 위해 for 반복문을 이용했다.
for 반복문이 3번 반복하는 동안 scanf() 를 통해 a배열 3개에 입력값을 하나씩 이때 이전 배열보다 더 큰수이면 그 큰수를 변수 j 에 저장시켰다.
// #2
if (a[0] == a[1] && a[0]==a[2] && a[1]==a[2]) totall = 10000 + a[0] * 1000;
else if (a[0] == a[1]) totall = 1000 + a[0] * 100;
else if (a[0] == a[2]) totall = 1000 + a[0] * 100;
else if (a[1] == a[2]) totall = 1000 + a[1] * 100;
else {
totall = j * 100;
}
printf("%d", totall);
return 0;
이후 문제 조건에 따라 세개가 모두 같은 경우를 if 조건문에 넣었고
셋중 두개만 같은경우 어떤 것끼리 같은지 모르기 때문에 a[0] == a[1], a[0] ==a[2], a[1] == a[2] 의 세가지 경우 모두 else if 구문으로 구현
마지막으로 세개가 모두 다른 경우 앞서 구했던 가장 큰 수가 담긴 j 변수를 이용해 else 구문으로 구현
다른사람:
#include <stdio.h>
int main() {
int a,b,c ,MAX, sum=0;
scanf("%d %d %d", &a,&b,&c);
if ((a==b)&&(b==c)) {
sum = 10000+ (1000*a);
} else if (a==b) {
sum = 1000+ (a*100);
} else if (b==c) {
sum = 1000+ (b*100);
} else if (c==a) {
sum = 1000+ (c*100);
} else {
MAX = (((a>=b)?a:b)>=c)?((a>=b)?a:b):c;
sum = 100*MAX;
}
printf("%d",sum);
}
완성된 코드는 위와 같다.
주목할 점은 세 수가 다를 때 가장 큰 수를 구해야 하는데 여기선 MAX 를 구하는 부분이다.
MAX = (((a>=b)?a:b)>=c)?((a>=b)?a:b):c;
C 언어만의 독특한 ' 삼항 연산자 '를 이용한 참,거짓을 통해 변수에 값을 저장하는 방식을 이용했다.
위 사진과 같은 방식으로 이를 이용할 수 있다.
위 코드의 경우 삼항 연산자 3개가 겹쳐서 사용되어 다소 복잡해 보이지만 왼쪽 연산부터 차례대로 생각해 보면 이해할 수 있다;
코드 과정을 쉽게 보자면
① a>=b 가 참인 경우 a, 거짓일 경우 b (이때 a=b의 경우 어짜피 같기 때문에 둘중 어떤걸 사용해도 상관없음)
② 위 결과에 따라 큰 수인 a 혹은 b가 >= c 를 만족(참) 하면 a 혹은 b , 거짓이면 c 가 변수 MAX에 담김
'C언어(C programming) > 문제풀이(백준,BaekJoon)' 카테고리의 다른 글
백준 25314 (코딩은 쳬육과목 입니다) [C programming] [Implemention/구현] (0) | 2023.11.05 |
---|---|
백준 25304 (영수증) [C programming] [VS/Visual Studio] (0) | 2023.11.05 |
백준 2525 (오븐 시계) [C programming] [VS/Visual Studio] (1) | 2023.11.03 |
백준 9498 (시험성적) [C programming] [VS/Visual Code] (0) | 2023.11.03 |
백준 11382 (꼬마 정민) [C programming] [VS / Visual Studio] (0) | 2023.11.01 |