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
- 백준
- 백준 #c++
- flutter #플러터
- unity #2d-game #minigame #vscode
- flutter #플러터 #분석
- baekjoon #백준 #boj
- git #unity #깃허브
- 유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과
- flutter #todolist
- flutter #상태관리
- boj #c++
- 비주얼스튜디오 #코드스니펫
- flutter #firebase #플러터 #파이어베이스 #연동
- flutter #깃
- baekjoon #boj #c++
- #유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과정
- 백준 #boj
- unity #2d-game
- Flutter
- 비주얼 스튜디오 #vs #visual studio
- flutter #git
- 플러터 #flutter #restful #rest api
- boj #baekjoon #c++
- 로컬저장소 #이름변경
- VS #비주얼스튜디오
- 인턴 #프론트엔드 #개발자 #프론트엔드개발자 #취준
- 백준 #boj #baekjoon
- firebase #파이어베이스
- boj #baekjoon
- flutter #app #취준
Archives
- Today
- Total
cococo-coding
2857번. FBI (c++풀이) 본문
문제
최종 코드
#include <iostream>
using namespace std;
/*
1. 5명의 FBI 요원 첩보원명을 입력받는다.
2. 첩보원명에 FBI가 있는 요원을 찾는다.
3. 해당 요원들의 순서를 출력한다.
(없을 경우 'HE GOT AWAY!' 출력)
*/
int main() {
int fbi=0;
int cnt=5;
for(int j=1; j<=5; j++){
//1
string name;
cin >> name;
//2
for(int i=0; i<name.size()-2; i++){
if(name[i]=='F' && name[i+1]=='B' && name[i+2]=='I'){
cout << j << " ";
fbi++;
break; //FBIFBI 같은 케이스 예외처리하기 위함
}
}
}
//3
if(fbi==0){
cout << "HE GOT AWAY!" << endl;
}
return 0;
}
코드 풀이
4번째 시도만에 맞춘 문제이다.
예제에 있는 입력들을 넣었을 때는 다 정상적으로 출력이 나왔는데 계속해서 20%정도에서 틀렸다고 떴다.
뭐가 문제인지 몰라 질문을 올렸고 반례들로 FBI 가 이름에 여러번 들어가 있는 경우도 고려해보라고 답변이 달렸다.
처음에 작성한 코드는 아래와 같다. (계속해서 틀린 코드)
//2
for(int i=0; i<name.size()-2; i++){
if(name[i]=='F' && name[i+1]=='B' && name[i+2]=='I'){
cout << j << " ";
fbi++;
}
}
이 경우 아래와 같은 입력을 넣은 경우에
출력이 1만 나와야하지만
FBIFBI 가 두 번 카운팅 되면서 1 1이 나오게 된다.
//입력
FBIFBI
ABC
DEF
HIG
KLMN
//나와야 하는 출력
1
//나오는 출력
1 1
이런 경우를 처리하기 위해 break; 구문을 추가하여 아래와 같은 코드를 작성했다.
//2
for(int i=0; i<name.size()-2; i++){
if(name[i]=='F' && name[i+1]=='B' && name[i+2]=='I'){
cout << j << " ";
fbi++;
break; //FBIFBI 같은 경우 처리
}
}
이렇게 코드를 변경하면 위와 동일한 입력을 넣었을 경우 출력이 정상적으로 1만 나오게 된다.
//입력
FBIFBI
ABC
DEF
HIG
KLMN
//나와야 하는 출력
1
//나오는 출력
1
FBIFBI 에서 첫 번째 FBI 를 발견하고 break; 구문을 통해 빠져나오게 된다.
만약 break; 구문을 넣지 않았더라면 FBIFBI 에서 첫 번째 FBI를 카운팅하고 두 번째 FBI까지 카운팅해서 1 1이 나오게 된다.
이 부분을 몰라서 계속 헤맸는데
혹시나 나와 비슷한 문제로 구글링하는 분들께 도움이 될까싶어 올려본다.
'[BOJ] 코드 모음 > C++_learning 문제집' 카테고리의 다른 글
11651번. 좌표 정렬하기 2 (0) | 2024.01.07 |
---|---|
11650번. 좌표 정렬하기 (1) | 2024.01.07 |
4999번. 아! (c++ 풀이) (0) | 2024.01.07 |
10178번. 할로윈의 사탕 (c++ 풀이) (0) | 2024.01.05 |
23971번. ZOAC 4 (c++ 풀이) (2) | 2024.01.05 |