[코딩테스트] 백준 - 항해99클럽 코딩테스트 스터디 27일차 : Yangjojang of The Year

Co-Zi·2024년 11월 24일
0

99클럽TIL

목록 보기
12/15
post-thumbnail

해당 글은 항해99 클럽 코딩테스트 스터디에서 진행된 27일차(20241123) 비기너 문제에 대한
TIL(Today I Learned) 내용입니다.

	문제 출처) https://www.acmicpc.net/problem/11557
    

문제해결에 활용한 핵심포인트!

이 문제에서 주목해야할 부분은 다음과 같다.

1. 주요조건

  • 학교별로 한 해동안 술 소비량이 주어질 때, 가장 술 소비가 많은 학교 이름을 출력하여라.

2. 입력

  • 입력으로 주어지는 조건들에 대해서 따로 처리가 필요하다.

  • 입력의 첫 줄: 테스트 케이스의 숫자 T

  • 각 케이스 당

    • 매 입력의 첫 줄: 학교의 숫자 정수 N(1 ≤ N ≤ 100)
    • 이어서 N줄에 걸쳐 학교 이름 S(1 ≤ |S| ≤ 20, S는 공백없는 대소문자 알파벳 문자열)와 해당 학교가 지난 한 해동안 소비한 술의 양 L(0 ≤ L ≤ 10,000,000)이 공백으로 구분되어 정수로 주어진다.
  • 같은 테스트 케이스 안에서 소비한 술의 양이 같은 학교는 없다고 가정한다.-> 추가 고려할 필요 X


3. 원하는 답안

  • T번 동안 진행되는 테스트 케이스들에서 "각 케이스당 술 소비가 가장 많은 학교이름"을 출력해야한다.

풀이방향

=> 문제에서 주어지는 입력에 대한 파악과 처리가 문제풀이의 핵심 관건이다.

(1) 해당 문제에 유리한 구조 및 필요한 사항들 파악

  • 결국 가장 큰 값(술 소비량)을 구하기 위한 비교와 그 큰 값을 가지는 학교이름에 대한 출력이 필요하다.

(2) 반복문 실행 상황에 대한 파악

  • 조건 고려사항
    (i) T번 테스트케이스를 진행하는데
    -> for문 T번 반복

    (ii) 1번의 테스트케이스마다 그 안에서의 값(술 소비량)이 최대인 경우에 대해
    -> 1번의 테스트케이스에서 최대값을 구하기 위해 N번의 비교 수행
    -> 최대인 경우의 학교이름도 변수에 따로 저장한다.

    (iii) 그 경우에 해당하는 학교이름을 출력한다.
    (또는 각 테스트 케이스마다 최대값을 가지는 학교이름을 기억해뒀다가 한 줄씩 출력한다.)
    -> 1번 테스트케이스 끝날 때마다, 최대값을 가지는 학교이름을 출력한다.


(3) 추가 개선 방향

  • 입력에 대해서 Scanner 대신 BufferedReader를 활용하여 입력을 처리할 수 있다.

  • 출력에 대해서 각 테스트케이스가 끝날때마다(반복문이 한 loop 끝날때마다) 출력하는 것 대신
    StringBuilder 활용하여 반복문이 완전히 다 끝나고 맨 마지막에 한번만 출력하게 할 수 있다.

profile
한걸음 한걸음

0개의 댓글