플라즈밍
플라즈마 IT
플라즈밍
  • All (163)
    • MindSet (2)
    • Wisdom (8)
    • Book (18)
    • [Web] (6)
      • [Web]Guide (2)
      • [Web]HTML-CSS-JS (1)
      • [Web]ReactJS (0)
      • [Web]NextJS (1)
    • 퀀트주식투자 (4)
      • [리포트]포트폴리오 (4)
    • 자산배분전략 (2)
      • [리포트]자산배분전략 (1)
    • 포트폴리오 (0)
      • 발걸음 (0)
    • 개발 Note (3)
    • TipNote (5)
    • 알고리즘 (27)
      • 백준[BOJ] 오답노트 (27)
      • 백준[BOJ] 강의 정리 노트 (0)
    • etc-posts (18)
      • Unity :: C# 튜토리얼 (18)
    • Web&Know (23)
    • 끄적임 (4)
    • 세상이슈 (0)
    • Youtube 유튜브 (3)
      • Youtube 채널소개 (3)
    • 창업 Know&Idea (1)
    • Web&Dev (4)
    • 프로젝트 (6)
      • Unity5 Project (3)
      • UnrealEngine4 Project (2)
      • Web Page (1)
    • 주가차트-기술적분석 (2)
    • BlockChain (7)
    • SystemDesign (11)

인기 글

최근 글

hELLO · Designed By 정상우.
플라즈밍

플라즈마 IT

알고리즘/백준[BOJ] 오답노트

알고리즘 문제풀이전에 할것. 자료구조 선택하기 - 백준 알고리즘 오답노트 1012

2019. 5. 6. 19:51
반응형

https://www.acmicpc.net/problem/1057

 

1057번: 토너먼트

김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를 한다. 이긴 사람은 다음 라운드에 진출하고, 진 사람은 그 라운드에서 떨어진다. 만약 그 라운드의 참가자가 홀수명이라면, 마지막 번호를 가진 참가자는 다음 라운드로 자동 진출한다. 다음 라운드에선 다시 참가자의 번호를 1번부터 매긴다. 이때, 번호를 매기는 순서는 처음

www.acmicpc.net

 

 

#알고리즘 문제풀이전에 반드시 생각 할것. 자료구조 선택하기 

 

 

#1. 문제 풀이 자료구조 선택

 


처음에는 자료구조를 배열로 해서 복잡한 코드를 구상했다.

배열과 check 배열을 이용해서 해당 범위를 점차 늘려가면서 한명을 뽑는 과정을 생각함. 그러나 3중 for문을 이용하게 되고, 복잡하게 엉킹 반복변수 i는 고뇌하며 피를 토하기 시작함.

 

그리고 코드를 싹 지우고 다시 다른 방법을 생각했다.


스택이나 큐 등의 기본적인 STL 컨테이너를 생각해서 시뮬레이션 과정을 대폭 줄임,
간단하고 이해하기 쉽게 ~ 

 

 


#2. 논리 실수 

 

 

 

아직도 저런 경우에는 어떻게 해야 될 지 모르겠다. 특히나 이번경우에는 예시의 testcase는 잘 통과해서

왜 틀렸는지 몰라서 앞이 캄캄해 졌다. 빈혈인가. 

 

제일 힘든 상황이 주어진 Testcase을 통과했고 내 코드는 계속 틀려있는 경우다 .

내 코드가 통과하지 못하는 TestCase을 내가 만들어 내야 되니까.



x = q.front(); q.pop();
y = q.front(); q.pop();
// cout<<"x : "<<x<<" y : "<<y<<"\n";
if(x == 'A' && y == 'B' || x == 'B' && y == 'A'){ // FB2. A,B가 순서가 바뀔수도 있잔항...
cout<<round<<"\n";
return 0;
}
else if( x == 'A' || y =='A'){ // FB2. y가 B일 수도 있잖아
tmp.push('A');
}
else if( x == 'B' || y == 'B'){
tmp.push('B');
}
else{
tmp.push('.');
}



 

 

 

//1057 


#include 
#include 
#include 
#include 

using namespace std; 
bool state[100002]; 
int main(){ 
//입력 처리 
int n; cin>>n; int a,b; cin>>a>>b; 
int round = 1; 
queue q; 
for(int i = 1; i <= n ; i++){ 
if(i == a){ 
q.push('A'); 
} 
else if(i == b){ 
q.push('B'); 
} 
else{ 
q.push('.'); 
} 
} 
// while(!q.empty()){ 
//  cout<<q.front()<<" "; q.pop(); 
// } 
//cout<<"\n"; 
while(true){ 

int countoffight = q.size() / 2; 
bool isodd = (q.size() % 2 == 1) ? true : false; 
queue tmp; 

for(int i = 1 ; i<= countoffight; i++){ 
char x,y; 
x = q.front(); q.pop(); 
y = q.front(); q.pop(); 
// cout<<"x : "<<x<<" y : "<<y<<"\n"; 
if(x == 'A' && y == 'B' || x == 'B' && y == 'A'){ // FB2. A,B가 순서가 바뀔수도 있잔항... 
cout<<round<<"\n"; 
return 0; 
} 
else if( x == 'A' || y =='A'){ // FB2. y가 B일 수도 있잖아 
tmp.push('A'); 
} 
else if( x == 'B' || y == 'B'){ 
tmp.push('B'); 
} 
else{ 
tmp.push('.'); 
} 
} 

if(isodd){ 
tmp.push(q.front()); q.pop(); 
} 

round++; 
q = tmp; 
// cout<<"size : "<<q.size()<<"\n"; 
if(q.size() == 1)break; 
} 
return 0; 

} 

//FB1. 문제 풀이 자료구조 선택 
/* 
처음에는 자료구조를 배열로 해서 복잡한 코드를 구상했으나, 
스택이나 큐 등의 기본적인 STL 컨테이너를 생각해서 시뮬레이션 과정을 대폭 줄임, 
간단하고 이해하기 쉽게 ~  
*/ 

//FB2. 논리 실수 ,  
/* 
x = q.front(); q.pop(); 
y = q.front(); q.pop(); 
// cout<<"x : "<<x<<" y : "<<y<<"\n"; 
if(x == 'A' && y == 'B' || x == 'B' && y == 'A'){ // FB2. A,B가 순서가 바뀔수도 있잔항... 
cout<<round<<"\n"; 
return 0; 
} 
else if( x == 'A' || y =='A'){ // FB2. y가 B일 수도 있잖아 
tmp.push('A'); 
} 
else if( x == 'B' || y == 'B'){ 
tmp.push('B'); 
} 
else{ 
tmp.push('.'); 
} 


*/

 

 

 

 

 

 

 

 

 

플라즈마 IT 블로그 - 코딩 공부 정리, IT 정보 공유

 

https://plasmacodeing.tistory.com/

 

조금이라도 도움이 되었다면 공감 및 댓글 주세요~~

 

 

 

반응형
저작자표시 (새창열림)

'알고리즘 > 백준[BOJ] 오답노트' 카테고리의 다른 글

C 숫자 각 자리수 분해. 이,일의 자리수 분해 - 백준 알고리즘 오답노트 1110  (0) 2019.05.06
C++ int 오버플로어 예측 - 백준 알고리즘 오답노트 2004  (0) 2019.05.06
별 찍기 5 - 백준 알고리즘 오답노트 2442  (0) 2019.05.06
그래프 탐색시 가로,세로 실수 - 백준 알고리즘 오답노트 1012  (0) 2019.04.13
C++ 무한루프 탈출 break continue - 백준 알고리즘 오답노트 10845  (0) 2019.03.02
    '알고리즘/백준[BOJ] 오답노트' 카테고리의 다른 글
    • C 숫자 각 자리수 분해. 이,일의 자리수 분해 - 백준 알고리즘 오답노트 1110
    • C++ int 오버플로어 예측 - 백준 알고리즘 오답노트 2004
    • 별 찍기 5 - 백준 알고리즘 오답노트 2442
    • 그래프 탐색시 가로,세로 실수 - 백준 알고리즘 오답노트 1012
    플라즈밍
    플라즈밍
    퀀트 주식투자 자산배분 데이터분석 정보 공유 프로그래밍,투자 주제의 책 강의 리뷰 노하우 전수

    티스토리툴바