ORDERING 질문입니다. firenin 테스트 케이스는 만족하는데 오답이 뜨네요. 알고리즘은 다음과 같습니다. 위치가 정해진 경우를 자리를 잡았다라고 표현하겠습니다. ex) 입력 4, 4 (4가지 일과, 4가지 작업순서) DA BD CA CD 위와 같이 입력이 될 경우 A부터 D까지 순회하면서 A를 하기전에 해야하는 일이 있는지 검토하였습니다. 위의 경우에는 D, C 를 해야 하는데 D와 C의 최소값인 C 를 이용하여 C 보다 작지만 자리를 잡지 못한 B 를 인자로 함수를 재실행합니다. B 의 경우에는 선행되야 하는 작업이 없기 때문에 벡터에 B를 넣습니다. 이제 B는 자리를 잡았습니다. 다시 A로 와서 D, C 의 최소값인 C 를 위와 같은 방법으로 진행합니다 C 역시 선행 작업이 없기 때문에 C를 넣습니다. C 도 자리를 잡았습니다 A가 아직도 자리를 잡지 않았기 때문에 A 검토. D가 선행되야 하기 때문에 D를 검토합니다. D는 B와 C가 선행되어야 하는데, B,C 의 경우 이미 자리를 잡았기 때문에 D를 벡터에 넣습니다. D 또한 자리를 잡았고 남은 A를 넣어줍니다. 벡터에는 BCDA 가 들어가 있고, 이를 순서대로 출력해줍니다. 어느 부분이 잘못된건지 도움 부탁드립니다 ㅜㅜ #include <iostream> #include <vector> using namespace std; int C; int N; int M; char data[100 + 1][2 + 1]; char origin[26 + 1]; vector<char> result; void Find(char &c) { if (origin[c - 65] == '\0') return; bool isExist = false; char min = 99; for (int i = 0; i < M; i++) { if (data[i][1] != c) { } else { if (origin[data[i][0] - 65] != '\0') { if (min > data[i][0]) { min = data[i][0]; } isExist = true; } } } if (isExist) { char p; for (int i = c + 1; i < min; i++) { p = i; Find(p); } result.push_back(min); origin[min - 65] = '\0'; Find(c); c++; } else { result.push_back(c); origin[c - 65] = '\0'; } } void Func() { int originIndex = 0; char target = 65; int count = N; for (int i = 0; i < N; i++) { Find(target); target++; } } void SetUp() { int alph = 65; for (int i = 0; i < N; i++) { origin[i] = alph++; } } int main() { cin >> C; while (C--) { cin >> N; cin >> M; SetUp(); for (int i = 0; i < M; i++) { cin >> data[i][0]; cin >> data[i][1]; } Func(); for (int i = 0; i < N; i++) { cout << result.at(i); } cout << endl; result.clear(); } return 0; } 9년 전
2개의 댓글이 있습니다. Being 3 2 CB BA 같은 입력에서 제대로 동작하지 않을 것 같습니다. 9년 전 link firenin 감사합니다 9년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
firenin
테스트 케이스는 만족하는데 오답이 뜨네요.
알고리즘은 다음과 같습니다.
위치가 정해진 경우를 자리를 잡았다라고 표현하겠습니다.
ex) 입력
4, 4 (4가지 일과, 4가지 작업순서)
DA
BD
CA
CD
위와 같이 입력이 될 경우
A부터 D까지 순회하면서
A를 하기전에 해야하는 일이 있는지 검토하였습니다.
위의 경우에는 D, C 를 해야 하는데 D와 C의 최소값인 C 를 이용하여
C 보다 작지만 자리를 잡지 못한 B 를 인자로 함수를 재실행합니다.
B 의 경우에는 선행되야 하는 작업이 없기 때문에
벡터에 B를 넣습니다. 이제 B는 자리를 잡았습니다.
다시 A로 와서 D, C 의 최소값인 C 를 위와 같은 방법으로 진행합니다
C 역시 선행 작업이 없기 때문에 C를 넣습니다. C 도 자리를 잡았습니다
A가 아직도 자리를 잡지 않았기 때문에 A 검토.
D가 선행되야 하기 때문에 D를 검토합니다.
D는 B와 C가 선행되어야 하는데, B,C 의 경우 이미 자리를 잡았기
때문에 D를 벡터에 넣습니다. D 또한 자리를 잡았고
남은 A를 넣어줍니다.
벡터에는 BCDA 가 들어가 있고, 이를 순서대로 출력해줍니다.
어느 부분이 잘못된건지 도움 부탁드립니다 ㅜㅜ
9년 전