본문 바로가기

알고리즘/인프런

섹션 2. Array(1, 2차원 배열)_8. 등수 구하기

문제

  • N명의 학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성하세요.
  • 같은 점수가 입력될 경우 높은 등수로 동일 처리한다.
  • 즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다.

입력

  • 첫 줄에 N(3<=N<=100)이 입력되고, 두 번째 줄에 국어점수를 의미하는 N개의 정수가 입력된다.

출력

  • 입력된 순서대로 등수를 출력한다.

입출력 예제


풀이 방식을 정리해보자.

 

1. 학생의 수를 입력받을 변수 N과 국어점수를 입력받을 배열 score[ ] 를 선언한다. 

 

2. for문을 통해 배열에 입력받은 국어점수 값을 저장한다.

 

3. 메소드 구현으로 넘어가보자.

 

4. 결과를 int형 배열로 출력해야하므로 동일한 형으로 작성한다.

 

5. 결과를 저장할 배열 rank[ ] 를 선언한다.

 

6. i부터 N까지 도는 for문( i ) 을 작성하고, cnt를 1로 초기화한다.

  • cnt는 등수를 저장할 변수로, 등수는 1부터 시작하므로 for문( i )을 돌 때마다 1로 초기화한다. 

7. j부터 N까지 도는 for문( j ) 을 작성하고, [ j ] 에 들어간 점수가 더 크면 등수에 1을 더한다.

  • 예를 들어 90 100 92 라는 점수가 있다고 가정해보자.
  • 90은  for( i )문이고, 이 90이라는 점수를 기준으로 해서 for( j )문에서 100, 92를 비교한다.
  • [ j ]에 있는 100이 [ i ]에 90보다 크므로 cnt에 1 더해준다.
  • 그 후에 다시 [ i ]에 90과 [ j ]에 92를 비교하고, 또다시 [ j ]가 크므로 cnt에 1을 더해서 결과적으로 90점은 3등이 된다.

8. 이렇게 구한 등수 cntrank[ ] 배열에 저장하고 리턴한다.

 

수행 결과를 확인해보자.


해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.