[백준 7568] Silver5 덩치 JAVA

최희정·2022년 8월 31일
0


🔥주의할 점

  • 키와 몸무게가 모두 클 때에만 '덩치가 크다'라고 정의할 수 있다.

알고리즘 [접근 방법]

'덩치가 크다'는 기준은 키와 몸무게가 모두 비교하려는 대상보다 클 때에 만족한다.
즉, 어느 한 쪽이라도 만족 못할 경우 덩치가 크다고 할 수 없다.

일단 키와 몸무게를 담는 2차원 배열을 생성한 뒤,
이중 반복문을 통해 각 배열의 인덱스를 모두 탐색하는 방법이다.

이때 각 비교되는 두 인덱스의 각각의 키와 몸무게를 비교하여 랭크를 지정해줬다.

rank=1부터 시작하여 해당 사람보다 덩치가 큰 사람이 있을 경우 해당 사람의 순위는 뒤로 밀리기 떄문에 rank값을 증가시키는 것이다.
이렇게 자기 자신을 제외한 나머지 사람들을 모두 비교하여 rank 값을 출력하면 된다.

만약 자기보다 덩치가 큰 사람이 없을 경우 rank는 1이 될 것이고, 덩치가 큰 사람이 K명 있을 경우 rank+K가 자신의 랭크(순위)가 될 것이다.


  • 입력 방법을 바꿔 3가지 방법으로 풀이한다.

Scanner와 BufferedReader을 사용하여 풀 것이다.

마지막으로 출력 부분에서 매 부분마다 출력하는 방식이 아닌 StringBuilder을 사용하여 하나의 문자열로 이어준 뒤, 한 번에 출력해보는 방식을 사용해보았다.


- 방법 1

Scanner로 입력 받는 방법이다.

- 방법 2

Scanner 대신 BufferedReader 로 입력받는 방법이다.
BufferedReader의 경우 readLine() 입력메소드가 한 줄을 통쨰로 읽기 때문에 문자열 분리를 해주어야 한다.
이번의 경우 StringTokenizer가 아닌 split() 메소드를 사용해보았다.

- 방법 3

이번 문제는 워낙 케이스가 적어서 최대 출력 개수가 50개 밖에 안 되기 때문에 성능이 매우 차이난다고 할 수 없지만 출력의 반복 횟수가 많아질 수록 StringBuilder을 통해 출력 문구들을 하나로 묶어 마지막에 한 번에 출력하는 게 성능이 월등히 좋아진다.
(물론 StringBuilder 대신 BufferedWriter을 사용해도 된다.)

또한 입력방법은 직전코드와 같이 BufferedReader을 쓴다.


위에서부터 순서대로
방법 1: Scanner
방법 2: BufferedReader
방법 3: BufferedReader + StringBuilder

입력의 경우 확실히 Scanner보다는 BufferedReader가 빠른 걸 볼 수 있다.
출력 부분에서는 그리 차이는 안 나는 듯 (워낙 출력할 케이스가 적어서..!)

profile
차근차근 일상을 기록하는 컴공생 👩🏻‍💻

0개의 댓글