일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- git #unity #깃허브
- boj #baekjoon #c++
- 비주얼스튜디오 #코드스니펫
- 비주얼 스튜디오 #vs #visual studio
- 백준 #c++
- flutter #app #취준
- unity #2d-game #minigame #vscode
- 로컬저장소 #이름변경
- boj #c++
- unity #2d-game
- flutter #todolist
- 백준 #boj
- 백준 #boj #baekjoon
- 인턴 #프론트엔드 #개발자 #프론트엔드개발자 #취준
- 백준
- 유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과
- baekjoon #boj #c++
- boj #baekjoon
- flutter #플러터 #분석
- flutter #상태관리
- flutter #git
- flutter #깃
- baekjoon #백준 #boj
- flutter #플러터
- #유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과정
- 플러터 #flutter #restful #rest api
- VS #비주얼스튜디오
- flutter #firebase #플러터 #파이어베이스 #연동
- firebase #파이어베이스
- Flutter
- Today
- Total
cococo-coding
5073번. 삼각형과 세 변 (c++풀이) 본문
최종 코드
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
//sort함수를 이용하여 세 변의 길이를 오름차순 정렬
//sort함수를 사용하기 위해 algorithm 헤더 선언
//1. 삼각형의 세 변의 길이를 입력받는다.
//2. 각 케이스별로 분류한다.
//3. 케이스별 결과를 출력한다.
//1
while(1){
int side[3]={0,};
for(int i=0; i<3; i++){
cin >> side[i];
}
//0 0 0을 입력받은 경우 반복문 탈출
if(side[0]==0 && side[1]==0 && side[2]==0) break; // 0 0 0을 입력받은 경우 반복문 탈출
//가장 긴 변 찾기
sort(side, side+3);
//2
string out;
if(side[0]+side[1]<=side[2]) out="Invalid"; //가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 길지 않은 경우
else if(side[0]==side[1] && side[1]==side[2] && side[0]==side[2])
out="Equilateral";
else if(side[0]==side[1] || side[1]==side[2] || side[0]==side[2])
out="Isosceles";
else out="Scalene";
//3
cout << out << endl;
}
return 0;
}
풀이 과정
처음에는 단순하게 다섯가지 케이스별로 분류하면 되지~ 해서 아래와 같이 코드를 짰다.
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
//sort함수를 이용하여 세 변의 길이를 오름차순 정렬
//sort함수를 사용하기 위해 algorithm 헤더 선언
//1. 삼각형의 세 변의 길이를 입력받는다.
//2. 각 케이스별로 분류한다.
//3. 케이스별 결과를 출력한다.
//1
while(1){
int side[3]={0,};
for(int i=0; i<3; i++){
cin >> side[i];
}
//가장 긴 변 찾기
sort(side, side+3);
//2
string out;
if(side[0]==0 && side[1]==0 && side[2]==0) break; // 0 0 0을 입력받은 경우 반복문 탈출
else if(side[0]+side[1]<=side[2]) out="Invalid"; //가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 길지 않은 경우
else if(side[0]==side[1] || side[1]==side[2] || side[0]==side[2])
out="Isosceles";
else if(side[0]==side[1]==side[2])
out="Equilateral";
else out="Scalene";
//3
cout << out << endl;
}
return 0;
}
그런데 세 변의 길이가 동일한 입력을 넣으면 계속해서 두 변의 길이가 같다고 출력되었다.
아래의 7 7 7 입력에서는 "Equilateral"이 출력되야 하는데 계속해서 "Isosceles"가 출력되었다.
그래서 위의 코드처럼 두 개의 변의 길이가 같은 경우를 위로 올리고, 그 다음에 세 변의 길이가 같은 경우를 넣었는데도 결과는 동일하게 나왔다.
세 변의 길이가 같은 경우가 두 변의 길이가 같은 경우로 출력되는 것이다.
그래서 코드를 다음과 같이 변경했다.
//변경 전의 코드
else if(side[0]==side[1]==side[2])
//변경 후의 코드
else if(side[0]==side[1] && side[1]==side[2] && side[0]==side[2])
이렇게 변경한 코드로 다시 돌려보니 이번에는 잘 나왔다. 백준에서도 통과했다.
틀린 이유
구글링을 해보니, if 조건문 안에 나처럼 코드를 작성하신 분들이 꽤 보였다.
(if문 조건식 안에 부등호 2개 쓰면 안되나요? :https://www.acmicpc.net/board/view/81105)
위의 질문처럼 a값이 90보다 크거나 같고, 100보다는 작거나 같은 경우를 분기할 때 if(90<=a<=100) 으로 작성했는데
a에 어떤 값을 입력해도 이 if문 조건에 부합한다는 질문내용이었다.
답변해주신 분의 설명을 보면 위의 질문자분처럼 if(90<=a<=100)으로 코드를 작성하면
이는 곧 if((90<=a) <= 100)과 같은 코드가 된다고 한다.
a가 90보다 크거나 작은 경우 if(90<=a)가
a가 90보다 작다면 if(a<=100)이 실행되므로 언제나 참이 나오는 결과가 된다..
즉, 앞으로는 if 조건문을 작성할 때 하나씩 조건식을 쓰고 &&와 ||을 이용하여 서로 붙여주는 연습을 하자! 라는 생각이 들었다.
'[BOJ] 코드 모음 > C++_learning 문제집' 카테고리의 다른 글
2587번. 대표값2 (c++풀이) (0) | 2023.12.13 |
---|---|
5543번. 상근날드 (c++풀이) (0) | 2023.12.13 |
2744번. 대소문자 바꾸기 (c++풀이) (0) | 2023.12.12 |
2902번. KMP는 왜 KMP일까? (c++풀이) (0) | 2023.12.12 |
5596번. 시험 점수 (c++풀이) (0) | 2023.12.12 |