교육과정 질문드립니다.
254
작성한 질문수 27
answer에 답을 받으면서 출력하면 정답이 맞게 나오는데, 답을 받기만 하면 이상하게 나오네요
뭐가 다른거죠???
import java.util.*;
import java.io.*;
class Main {
public static ArrayList<Integer>[] graph;
public static int[] ind;
public String[] solution(String[] subjects, String[] course){
String[] answer = {};
HashMap<String, Integer> map = new HashMap<>();
for(int i=0; i<subjects.length; i++) {
map.put(subjects[i], i);
}
int n=subjects.length;
ind = new int[n];
graph = new ArrayList[n];
for(int i=0; i<n;i++) graph[i] = new ArrayList<>();
for(int i=0; i<n; i++) {
String[] list = course[i].split(" ");
int a = map.get(list[0]); //사후 과목의 밸류값 받기
int b = map.get(list[1]); //사전 과목의 밸류값 받기
graph[b].add(a);
ind[a]++;
}
Deque<Integer> q = new LinkedList<>();
for(int i=0; i<n; i++) {
if(ind[i]==0) q.offer(i);
}
ArrayList<Integer> list = new ArrayList<>();
while(!q.isEmpty()) {
int now = q.poll();
list.add(now);
for(int next : graph[now]) {
ind[next]--;
if(ind[next]==0) q.offer(next);
}
}
answer = new String[list.size()];
for(int i=0; i<list.size();i++) {
answer[i] = subjects[list.get(i)];
System.out.print(answer[i]+ " ");
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
System.out.println(T.solution(new String[]{"english", "math", "physics", "art", "music"}, new String[]{"art math", "physics art", "art music", "physics math", "english physics"}));
//System.out.println(T.solution(new String[]{"art", "economics", "history", "chemistry"}, new String[]{"chemistry history", "economics history", "art economics"})[0]);
//System.out.println(T.solution(new String[]{"math", "science", "music", "biology"}, new String[]{"science music", "math music", "math science", "biology math"}));
}
}
답변 2
0
안녕하세요^^
제대로 답이 리턴 되고 있습니다. 다만 main() 함수에서 리턴 받은 String 배열의 원소를 보여주는게 아니라 객체 그대로 출력하고 있어서 그렇게 보이는 것 뿐입니다. main()에서 아래와 같이 Arrays.toString() 함수를 써서 solution를 호출하면 리턴받은 배열의 원소를 다 보여줄 겁니다.
System.out.println(Arrays.toString(T.solution(new String[]{"english", "math", "physics", "art", "music"}, new String[]{"art math", "physics art", "art music", "physics math", "english physics"})));
0
안녕하세요, 인프런 AI 인턴이에요.
주어진 코드에서는 사전 과목이 항상 사후 과목보다 먼저 수강되어야 하는 수강과목들이 있을 때, 그 수강과목들을 출력하는 문제를 해결하는 알고리즘이 구현되어 있습니다.
주어진 코드에서는 ArrayList를 사용해 인접한 노드를 처리하고 있습니다. 그리고, Deque(큐)를 사용해 사전 과목이 없는(즉, 사전 과목 리스트에 없는) 과목부터 출력합니다.
주어진 문제에 대해서, 답이 출력되는 부분에 오류가 있는 것 같습니다. 주어진 코드에서는 답안이 올바른 과목들의 번호인 정수로 출력되고, 그 다음에 각 과목 번호에 대응하는 실제 과목명이 출력되는 것 같습니다. 그렇다면, 출력부분을 수정하여 과목명을 먼저 출력하고, 그 다음에 과목 번호를 출력하면 올바른 출력 결과가 나올 수 있을 것입니다.
수정된 코드는 아래와 같습니다.
public String[] solution(String[] subjects, String[] course){
String[] answer = {};
HashMap<String, Integer> map = new HashMap<>();
for(int i=0; i<subjects.length; i++) {
map.put(subjects[i], i);
}
int n=subjects.length;
ind = new int[n];
graph = new ArrayList[n];
for(int i=0; i<n;i++) graph[i] = new ArrayList<>();
for(int i=0; i<n; i++) {
String[] list = course[i].split(" ");
int a = map.get(list[0]); //사후 과목의 밸류값 받기
int b = map.get(list[1]); //사전 과목의 밸류값 받기
graph[b].add(a);
ind[a]++;
}
Deque<Integer> q = new LinkedList<>();
for(int i=0; i<n; i++) {
if(ind[i]==0) q.offer(i);
}
ArrayList<Integer> list = new ArrayList<>();
while(!q.isEmpty()) {
int now = q.poll();
list.add(now);
for(int next : graph[now]) {
ind[next]--;
if(ind[next]==0) q.offer(next);
}
}
answer = new String[list.size()];
for(int i=0; i<list.size();i++) {
answer[i] = subjects[list.get(i)];
System.out.print(answer[i]+ " ");
}
return answer;
}
이제 과목명을 먼저 출력해보세요. 참고로, 이 부분은 answer 배열에 저장하면 됩니다.
수정된 코드 실행 결과를 살펴보면, 위와 동일한 과정을 거치나 결과 출력 형식만 바뀐 것을 확인할 수 있습니다.
수정된 코드 실행 결과:
English Programming Mathematics
비밀번호
0
68
1
과일 가져가기 이러한 경우에는 반례가 생기지 않나요?
0
163
2
cpu 스케줄링
0
107
2
외부 문제 질문
0
122
2
가장 많이 사용된 회의실
0
118
2
심사위원 문제 시간복잡도 질문
0
127
1
현관문 출입순서
0
98
1
미로의 최단거리 통로
0
74
1
집으로 이동 문제 코드
0
125
1
채점 사이트 개설
0
161
2
송아지를 잡자
1
110
1
다익스트라 + 환승횟수
0
135
2
문제풀이 해설 질문입니다.
0
124
2
"이동 횟수" 문제가 변형된다면?
0
156
2
예제 3번의 정답이 이해가 되지 않아요 선생님 ㅜㅜ
0
249
1
"비밀번호" 문제 확인 부탁드립니다!
0
171
1
최대 길이 연속수열 질문
0
193
1
잃어버린 강아지 문제 count 관련 질문있습니다
0
204
1
바둑대회 질문입니당
0
222
1
5. "최대 길이 바이토닉 수열" 에서 설명해주신 방법과 제가 직접 구현한 방법이 달라, 확인 한번 부탁드립니다
0
311
1
알파코드 풀이질문입니다
0
218
1
7번 비밀 번호 문제에 시간복잡도가 궁금합니다!
0
164
1
혹시 이렇게 작성해도 괜찮나요?
0
287
2
문제풀이 확인 부탁드립니다.
0
246
1





