문제
"맞았습니다." 코드
#include "iostream"
#include "vector"
#include "algorithm"
using namespace std;
// 백준 2480 주사위 세개
vector<int> v(3);
int result;
void func(){
sort(v.begin(), v.end());
if(v[0] == v[2]) { // 셋 다 같은 수
cout << 10000 + (1000 * v[0]);
}
else if((v[0] == v[1]) || (v[1] == v[2])) { // 2개가 같은 수. 항상 공통인 숫자는 2번째 숫자.
cout << 1000 + (v[1] * 100) ;
}
else{ // 셋 다 서로 다른 수
cout << v[2] * 100;
}
}
void input(){
cin >> v[0] >> v[1] >> v[2];
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
input();
func();
return 0;
}
리뷰
조건식을 잘못써서 처음에 틀렸다.
틀린 코드는 아래와 같다.
if((v[0] == v[1]) == v[2]) { // 셋 다 같은 수
result = 10000 + (1000 * v[0]);
}
틀린 이유는 숫자끼리 비교해야하는데, true와 숫자를 비교했기 때문이다.
주사위 숫자가 1 1 3 일때, 1 과 1은 같으니까 참이 나온다.
따라서 1과 3을 비교하게 되는게 아니라,
true와 3을 비교하게 되므로 항상 true가 나온다. 그래서 틀렸다.
고쳐서 맞은 코드는 아래와 같다.
#include "iostream"
#include "vector"
#include "algorithm"
using namespace std;
// 백준 2480 주사위 세개
vector<int> v(3);
int result;
void func(){
sort(v.begin(), v.end());
if((v[0] == v[1]) && (v[1] == v[2])) { // 셋 다 같은 수
result = 10000 + (1000 * v[0]);
}
else if((v[0] == v[1]) && (v[1] != v[2])) { // 앞쪽 2개가 같은 수
result = 1000 + (v[0] * 100) ;
}
else if((v[0] != v[1]) && (v[1] == v[2])) { // 뒤쪽 2개가 같은 수
result = 1000 + (v[1] * 100) ;
}
else{ // 셋 다 서로 다른 수
result = v[2] * 100;
}
cout << result;
}
void input(){
cin >> v[0] >> v[1] >> v[2];
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
input();
func();
return 0;
}
좀더 깔끔한 코드는 아래와 같다.
일단 정렬을 한다.
셋 다 같은 수라면, 첫번째 숫자와 세번째 숫자가 같을 것이다.
if(v[0] == v[2]) { // 셋 다 같은 수
cout << 10000 + (1000 * v[0]);
}
같은 수가 2개라면, 1번째 2번째가 같거나. 2번째와 3번째가 같을 것이다.
두 조건 모두 가운데 숫자가 공통으로 들어간다.
else if((v[0] == v[1]) || (v[1] == v[2])) { // 2개가 같은 수. 항상 공통인 숫자는 2번째 숫자.
cout << 1000 + (v[1] * 100) ;
}
바킹독님 코드 참고
바킹독님의 코드를 보고 나니깐 벡터를 안써도 됬겠구나 싶었다.
정렬하지 않고, 숫자 두 개가 같은 경우는 3가지 다.
1째와 2째를 비교. 2째와 3째를 비교. 1째와 2째를 비교.
셋 다 다른 수일 때는, max() 함수를 쓴 것이 좋았다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
윷놀이 백준 2490 c++ (0) | 2021.11.19 |
---|---|
홀수 백준 2576 c++ (0) | 2021.11.19 |
BFS 스페셜 저지 백준 16940 c++ (0) | 2020.11.05 |
N과 M(5), (6) 백준 15654번 c++ (0) | 2020.10.22 |
알고스팟 1261번 백준 c++ (0) | 2020.10.22 |