inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

8. 등수구하기

제 코드의 어떤 부분이 틀린지 모르겠습니다. (GPT도 오답인 케이스를 못찾아요..)

130

whdmscks11

작성한 질문수 1

0

package section_2;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class GetRank {
    public static ArrayList<Integer> solution(int[] scores) {
        ArrayList<Integer> list = new ArrayList<>();
        Integer[] sortedScores = new Integer[scores.length];
        Arrays.setAll(sortedScores, i -> scores[i]);
        Arrays.sort(sortedScores, Comparator.reverseOrder());
        System.out.println(Arrays.toString(scores));
        System.out.println(Arrays.toString(sortedScores));

        for (int score : scores) {
            for (int j = 0; j < scores.length; j++) {
                if (score == sortedScores[j]) {
                    list.add(j + 1);
                    break;
                }
            }
        }
        return list;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] scores = new int[n];
        for (int i = 0; i < n; i++) {
            scores[i] = sc.nextInt();
        }
        for (Integer i : solution(scores)) {
            System.out.print(i + " ");
        }
    }
}
gpt1.png.webpgpt2.png.webpgpt3.png.webp

 

java 코딩-테스트

답변 2

0

김태원

안녕하세요^^

위 코드는 문제가 없어 보입니다. 제가 채점사이트에 아래코드를 넣어보니 통과되었습니다.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
    public static ArrayList<Integer> solution(int[] scores) {
        ArrayList<Integer> list = new ArrayList<>();
        Integer[] sortedScores = new Integer[scores.length];
        Arrays.setAll(sortedScores, i -> scores[i]);
        Arrays.sort(sortedScores, Comparator.reverseOrder());
        //System.out.println(Arrays.toString(scores));
        //System.out.println(Arrays.toString(sortedScores));

        for (int score : scores) {
            for (int j = 0; j < scores.length; j++) {
                if (score == sortedScores[j]) {
                    list.add(j + 1);
                    break;
                }
            }
        }
        return list;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] scores = new int[n];
        for (int i = 0; i < n; i++) {
            scores[i] = sc.nextInt();
        }
        for (Integer i : solution(scores)) {
            System.out.print(i + " ");
        }
    }
}

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

질문 주신 내용은 점수 배열을 받아 각 점수에 대한 순위를 반환하려는 코드로 보입니다. 현재 코드가 잘못된 점은 동일한 점수가 있을 경우 올바른 순위를 반환하지 못한다는 것입니다. 기존 코드에서는 중복 점수에 대해 첫 등장 위치에 대한 순위만 반환하고 있습니다.

이 문제를 해결하기 위해서는, 점수 리스트에서 각 점수가 몇 번째로 높은지를 정확히 판단해야 합니다. 따라서, 기존의 sortedScores를 순회하는 방식은 중복 점수 처리를 고려하지 못하므로 이를 개선할 필요가 있습니다.

다음은 해결에 참고할 수 있는 링크와 유사한 문제에 대한 답변입니다:

  1. 저는 이렇게 풀어봤습니다!: 이 포스트에서는 점수를 정렬한 후, 원래 점수 배열과 정렬된 배열을 비교하며 순위를 구하는 방법을 설명하고 있습니다. 이를 참고하여 중복 점수 처리에 주의해 보는 것이 좋습니다.

또한, 주어진 테스트 이미지를 보면 점수들이 중복된 경우 각 점수에 대하여 동일한 순위가 부여된 것을 알 수 있습니다. 따라서, 동일한 점수의 첫 번째 마주친 순위가 아닌, 동일한 점수에 대해 동등한 순위 처리가 필요합니다. 이를 위해 다음과 같은 방법을 고려해 볼 수 있습니다.

import java.util.*;

public class GetRank {
    public static ArrayList<Integer> solution(int[] scores) {
        ArrayList<Integer> list = new ArrayList<>();
        int[] sortedScores = Arrays.stream(scores).boxed().sorted(Collections.reverseOrder()).mapToInt(Integer::intValue).toArray();
        Map<Integer, Integer> rankMap = new HashMap<>();
        
        int rank = 1;
        for (int score : sortedScores) {
            if (!rankMap.containsKey(score)) {
                rankMap.put(score, rank);
            }
            rank++;
        }

        for (int score : scores) {
            list.add(rankMap.get(score));
        }
        return list;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] scores = new int[n];
        for (int i = 0; i < n; i++) {
            scores[i] = sc.nextInt();
        }
        for (Integer i : solution(scores)) {
            System.out.print(i + " ");
        }
    }
}

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

33

1

갑자기 채점 사이트가 바뀌었어요

0

34

1

문제 리스트 페이지

0

29

1

채점 사이트 관련 질문드립니다

0

24

1

봉우리 문제 질문입니다

0

84

2

씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?

0

65

0

이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?

0

72

0

가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법

0

67

1

좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ

0

85

2

6-7 강의에서

0

48

1

6-6. 장난꾸러기 질문 있습니다.

0

46

1

강의 수강후 코딩테스트

0

111

1

answer 변수 사용 여부

0

46

1

2중 for문

1

85

2

2-11. 임시반장정하기 (Runtime Error)

0

63

1

혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?

0

70

1

이런 풀이는 어떨까요

0

44

1

자바 스트림 방식의 효율성 질문 드립니다.

0

57

1

알고리즘 자료 구조들..

0

63

1

StringBuilder vs BufferdWriter

0

48

1

원더랜드(프림)

0

50

1

이런 코드는 어떤가요?

0

61

1

bfs 풀이

0

57

1

병합정렬

0

57

1