Algorithm/Problem

[BOJ]1268 임시 반장 정하기 (B1, C++)

검은 까마귀 2024. 2. 21. 11:33

📋 개요 

다시 코테를 준비하는 과정에 앞서 몇가지 규칙을 정하였다.

  • C++로 문제를 풀 것
  • Visual Studio를 사용할 것
  • 시간제한을 두고 문제를 풀 것 ➡️ 시간이 넘어가면 답지확인
    • 백준 기준 브론즈4 ~ 실버2까지는 2시간 제한
    • 실버1 ~ 까지는 4시간 4시간 제한
  • 하루에 한문제 다음날은 문제 복기(블로그 진행)

일단, 구현문제이고 난이도는 생각보다 어렵지는 않았지만, 문제에서 중복에 대한 접근을 잘못한거 같아서 많이 해맸다. 2시간을 타이머로 맞춰두고 풀었지만, 2시간 내에 해결하지 못했다. 그래서 정해진 규칙대로 답변을 확인했다. 

 


🧩 문제

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

 

1268번: 임시 반장 정하기

첫째 줄에는 반의 학생 수를 나타내는 정수가 주어진다. 학생 수는 3 이상 1000 이하이다. 둘째 줄부터는 1번 학생부터 차례대로 각 줄마다 1학년부터 5학년까지 몇 반에 속했었는지를 나타내는 5

www.acmicpc.net

📝  형식 

📥 입력 📤 출력
첫째 줄에는 반의 학생 수를 나타내는 정수가 주어진다. 학생 수는 3 이상 1000 이하이다. 둘째 줄부터는 1번 학생부터 차례대로 각 줄마다 1학년부터 5학년까지 몇 반에 속했었는지를 나타내는 5개의 정수가 빈칸 하나를 사이에 두고 주어진다. 주어지는 정수는 모두 1 이상 9 이하의 정수이다. 첫 줄에 임시 반장으로 정해진 학생의 번호를 출력한다. 단, 임시 반장이 될 수 있는 학생이 여러 명인 경우에는 그 중 가장 작은 번호만 출력한다.

💡  예제

🔢 번호 📥 입력 📤 출력
1 5
2 3 1 7 3
4 1 9 6 8
5 5 2 4 4
6 5 2 6 7
8 4 2 2 2
4

 

🥲  내 코드 및 정답코


📖  해설 및 느낀점

내가 생각한 문제풀이

  1.  입력
  2.  같은 반이 겹칠때 count 증가 시킴
  3.  학생 번호를 기준으로 겹치는 cout을 합한다.
  4.  제일 값이 큰 인덱스(학생 번호)를 찾는다.(값이 동일한게 여러개라면 가장 작은 번호가 정답이다.)
  5.   큰 인덱스(학생 번호) 출력

중복을 고려하지 않고 문제 풀이를 이어나갔다.

 

정답의 문제풀이

  1. 입력
  2. cnt 2차원 배열을 생성
  3. 1~5학년을 돌면서 동일한 반이었던 테이블을 뽑아낸다.➡️중복제거가 알아서 됨
  4. 배열에 있는 값을 row기준으로 더하면서 큰값중에 인덱스(학생번호)를 출력

cnt 2차원 배열에 값을 덮어쓰기 함으로써 중복제거가 진행된다.

 

일단 배열을 여러개 사용하는것에 의해서 많이 헷갈렸던거 같다. 위의 틀린 정답처럼 풀이를 진행하게되면 반례가 나오게 되는데,

🔢 번호 📥 입력 📤 출력
반례 5
1 1 1 1 1
1 1 1 1 1
1 3 4 5 5
3 3 3 3 3
4 4 4 4 4
정답 3
틀린 코드 1

 

3번 학생의 경우 1번,2번,4번,5번 학생과 모두 같은 반이였지만, 1번학생은 2번 3번학생만 같은 반이였지만, 틀린 코드대로 하면 중복을 제거하지 않고 결과를 출력하기때문에 1번학생, 2번학생이 1학년때도 2번 2학년때도 2번 3학년때도 2번 쭈욱 가서 같은 반이였던 학생 수가 4가 나오게 됨으로 그중에서 가장 작은 학생번호인 1번이 나오게된다.

 

느낀점

문제를 풀면서 엄청난 자괴감에 빠졌다. 브1을 못푼다고? 코테를 준비해야하는 상황도 맞는건가? 라는 생각이 사로잡혔고 답지를 보면서 일종의 기법 같았다.

 

중복제거를 하기위해서 cnt 2차원 배열에 계속 레이어를 쌓아나가면서 덮어씌우기 하는 방식에 대한. 결론은 경험부족 문제 풀이 부족이었던거 같다. 사실은 cnt에 들어가는 값을 1이 아는 Ture/False로 해서 True의 갯수를 더해 카운트하는것도 좋은 방법인거 같다.

 

이제 막 감을 잡고 있는 단계에서 포기하기는 너무 이른 선택인거 같으니 죽이되든 밥이되는 지속적으로 공부를 해나가야겠다.

 

 

반응형