작성
·
38
0
선생님, 선생님이 짜주신 코드로 풀었는데, 오답이 나왔는데,
만약에 같은 키가 많은 친구들중에 하나가 철수고, 바꿔준 짝꿍도 동일한 키의 사람들이 있다면 누가 철수인지, 짝꿍인지 어떻게 구분하나요??
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
class problem06 {
// 06. 장난꾸러기
//선생님은 반 학생들에게 반 번호를 정해 주기 위해 운동장에 반 학생들을 키가 가장 작은 학생부터 일렬로 키순으로 세웠습니다.
//제일 앞에 가장 작은 학생부터 반 번호를 1번부터 N번까지 부여합니다. 철수는 짝꿍보다 키가 큽니다.
//그런데 철수가 앞 번호를 받고 싶어 짝꿍과 자리를 바꿨습니다.
//9
//120 125 152 130 135 135 143 127 160
public ArrayList<Integer> solution(int n, int[] arr){
ArrayList<Integer> answer = new ArrayList<>();
int[] tmp = arr.clone(); // 깊은 복사해야 기존의 arr이 변하지 않음.
Arrays.sort(tmp); // 오름차순 정렬
//다른애들만 그 순서를 ArrayList에 넣어준다.
for(int i=0; i<n-1;i++){
if(arr[i] != tmp[i]) answer.add(i+1);
}
return answer;
}
public static void main(String[] args){
problem06 T = new problem06();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt(); // 캐시의 크기
int[] arr = new int[n];
for(int i=0; i<n;i++){
arr[i] = kb.nextInt();
}
for(int x : T.solution(n, arr)){
System.out.print(x+" ");
}
}
}
답변 2
0
안녕하세요^^
철수의 키와 짝꿍의 키가 서로 다르다고 문제에서 주어졌기 때문에 구분이 됩니다.
만약 철수 짝꿍의 키가 3이고 철수의 키가 5라고 가정하고, 원래 키순으로 선다면
1 2 33 3 4 4 5 5 5
빨간색으로 표시된게 철수짝꿍과 철수라고 생각하고 둘이 자리를 바꾸면
1 2 5 3 3 4 4 5 5 3 입니다.
즉 제가 제공한 알고리즘대로 하면 철수는 3번, 철수짝꿍은 10번이 되는 것입니다.
위에 코드가 답이 안나오는 이유는
for(int i=0; i<n;i++){
if(arr[i] != tmp[i]) answer.add(i+1);
}
와 같이 수정해야 합니다.
마지막 학생인 n-1 인덱스까지 반복해야 합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
질문 주신 부분은 “장난꾸러기” 문제에서 두 학생의 위치가 서로 다른 상황을 찾는 문제입니다. 주어진 코드는 학생들의 키를 비교해 철수와 그의 짝꿍의 위치를 찾아냅니다. 다만, 코드에서 오답이 나오는 이유는 철수와 철수의 짝꿍을 정확히 식별하지 못하는 부분 때문으로 보입니다. 특히 같은 키를 가진 학생들이 있을 경우를 올바르게 처리하지 못할 수 있습니다.
기본적으로 문제를 해결하려면 다음 사항을 고려해야 합니다:
1. 정렬된 배열과 원래 배열을 비교: 정렬된 상태에서 두 학생의 위치가 다른 경우를 찾아냅니다.
2. 같은 키 처리: 같은 키를 가진 여러 학생이 있는 경우에는, 실제로 위치가 변한 학생을 정확히 식별할 수 있어야 합니다.
코드를 통해 문제를 해결하려면, 단순히 키를 비교하기보다는 학생들이 서로 바뀌었는지 확인하는 다른 방법이 필요할 수 있습니다. 예를 들어, 학생들 간의 현재 위치와 정렬된 위치를 비교해 그 차이를 식별하는 방식으로 문제를 해결할 수 있을 것입니다.
아래는 비슷한 질문에 대한 기존 답변을 가져왔으니 참고해 보시길 바랍니다:
- 장난꾸러기 문제 해결 방법에서 학생들이 정확히 바뀐 위치를 찾기 위한 반례를 확인하실 수 있습니다. 디버깅을 통해 변한 부분을 올바르게 인식하도록 할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.