Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 로컬저장소 #이름변경
- 인턴 #프론트엔드 #개발자 #프론트엔드개발자 #취준
- Flutter
- 백준 #c++
- #유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과정
- 플러터 #flutter #restful #rest api
- VS #비주얼스튜디오
- flutter #git
- 백준
- firebase #파이어베이스
- git #unity #깃허브
- 비주얼 스튜디오 #vs #visual studio
- 백준 #boj #baekjoon
- flutter #todolist
- flutter #app #취준
- boj #baekjoon
- flutter #깃
- 유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과
- flutter #상태관리
- boj #c++
- flutter #firebase #플러터 #파이어베이스 #연동
- unity #2d-game #minigame #vscode
- 백준 #boj
- baekjoon #백준 #boj
- flutter #플러터
- baekjoon #boj #c++
- boj #baekjoon #c++
- unity #2d-game
- flutter #플러터 #분석
- 비주얼스튜디오 #코드스니펫
Archives
- Today
- Total
cococo-coding
4493번. 가위 바위 보? (c++풀이) 본문
문제
풀이
가위바위보 자체만 놓고 승자를 찾는 문제라면 쉽게 풀었을 것 같은데, 테스트케이스 개수t 과 각 테스트케이스별 가위바위보 횟수n 에 맞춰서 푸는 문제라 복잡한 느낌을 받았다.
아래 코드를 보면 t를 먼저 입력받고, t를 반복해서 n을 입력받는다.
이렇게 반복되는 부분들이라면 변수들을 초기화하는 문장과 결과를 출력하는 문장을 어디에 두느냐가 중요하다.
아래 코드에서 //4에 해당하는 부분이 for문 안에 있으면 각 케이스별로의 승자를 출력하게 되므로, 문제에서 원하는 결과가 나오지 않는다.
주의) 잘못된 코드 - 문장의 위치가 반복문 안에 들어간 경우
for (int i = 0; i < n; i++) {
char p1, p2;
cin >> p1 >> p2;
//p1과 p2가 같은 것을 낸 경우(비긴경우)
if (p1 == p2) same++;
//p1이 이기는 경우 3가지
else if (p1 == 'R' && p2 == 'S') p1win++;
else if (p1 == 'P' && p2 == 'R') p1win++;
else if (p1 == 'S' && p2 == 'P') p1win++;
//남은 케이스는 p2가 이기는 경우 3가지
else p2win++;
//4 이 부분이 for문 안에 있는 경우
if (p1win > p2win) cout << "Player 1\n";
else if (p1win < p2win) cout << "Player 2\n";
else cout << "TIE\n";
}
결과
우리가 원하는 결과는 각 테스트케이스별 승자이지만, 이렇게 되면 매번 가위바위보를 할 때마다 승자가 출력되게 된다.
아래는 승자를 출력하는 부분(//4)을 for문 밖에 두어 우리가 원하는 결과가 출력되도록 만든 코드이다.
코드
#include <iostream>
using namespace std;
/*
1. 테스트케이스의 개수 t를 입력받는다.
2. 각 테스트케이스의 가위바위보 횟수n을 입력받는다.
3. 각 테스트케이스별로 R P S를 입력받는다.
4. 각 테스트케이스의 승자를 찾는다.
5. 승자를 출력한다.
*/
int main() {
//1
int t;
cin >> t;
//2
while (t--) {
int n;
cin >> n;
//3
int p1win=0, p2win=0, same=0;
for (int i = 0; i < n; i++) {
char p1, p2;
cin >> p1 >> p2;
//p1과 p2가 같은 것을 낸 경우(비긴경우)
if (p1 == p2) same++;
//p1이 이기는 경우 3가지
else if (p1 == 'R' && p2 == 'S') p1win++;
else if (p1 == 'P' && p2 == 'R') p1win++;
else if (p1 == 'S' && p2 == 'P') p1win++;
//남은 케이스는 p2가 이기는 경우 3가지
else p2win++;
}
//4
if (p1win > p2win) cout << "Player 1\n";
else if (p1win < p2win) cout << "Player 2\n";
else cout << "TIE\n";
}
}
후에 따로 사용자정의함수를 만들어서 승자를 판단하는 부분을 밖으로 빼도 괜찮을 것 같다.
'[BOJ] 코드 모음 > C++_learning 문제집' 카테고리의 다른 글
3059번. 등장하지 않는 문자의 합 (c++풀이) (1) | 2024.01.10 |
---|---|
3049번. 다각형의 대각선 (c++ 풀이) (0) | 2024.01.10 |
10801번. 카드게임 (c++풀이) (0) | 2024.01.09 |
10768번. 특별한 날 (c++풀이) (0) | 2024.01.09 |
5524번. 입실 관리 (c++ 풀이) (3) | 2024.01.09 |