보너스 시작!
./push_swap $ARG | ./checker $ARG
이렇게 실행을 하면, ARG
가 checker
의 main()
에 인자로 들어가고 push_swap
의 결과물, pa
나 sa
이렇게 출력된 결과가 파이프를 넘어서(?) STDIN
으로 들어간다.
그냥 예를 들자면, ./push_swap 1 3 4 5 2 | ./checker 1 3 4 5 2
로 실행했다고 하자.
push_swap
의 결과는~
rra
sa
뭐 이렇게 됐을 것이다. 이 문자열이 파이프 뒤쪽에 STDIN
으로 들어간다.
그러면 checker
에서는 get_next_line()
을 사용해서 STDIN
에 들어온 문자열을 개행 단위로 잘라서 읽어주면 된다.
그리고 각 라인이 어떤 operation인지 확인해서, 그에 맞는 기능을 실행시켜 main()
으로 들어온 인자를 정렬해준다.
그리고 모두 끝나면 스택 a
가 최종적으로 정렬되었는지와 스택 b
에는 아무것도 남아있지 않은지를 확인해서 둘 다 해당되면 OK
, 둘 중 하나라도 아니면 KO
를 출력하면 된다.
만약에 앞에 push_swap
을 먼저 실행시키지 않고 그냥 ./checker 1 5 2 4 3
이렇게만 들어오면, STDIN
에 아무것도 없을 테니까 문자열 입력을 기다리게 대기시킨다.
그럼 이제 직접 operation을 입력해서 정렬을 시켜주다가 CTRL+D
를 입력해서 종료했을 때의 결과를 확인해서 OK
또는 KO
를 출력하면 된다.
push_swap
과 마찬가지로 에러 사항들은 예외처리를 해주면 된다.
추가로, 없는 operation이 들어왔을 때나 operation 앞 뒤로 공백이 들어가면 에러로 처리한다.
위에서 다 적어서 쓸 게 없다.
거의 push_swap
에서 작성했던 코드들을 그대로 가져와서 사용했다.
대신, 여기서는 operation을 실행시켜도 어떤 operation인지 출력하지 않는다.
그래서 flag
를 0으로 넣어줬다.
그리고 뭐 get_next_line()
으로 한 줄씩 읽고 사용하고 나서 free()
해줘야 한다.
체커 별 거 없네~
체커 시작하기 전에 정확히 무슨 동작을 하는 프로그램을 만들어야 하는 거야? 싶어서 좀 읭했었다.
주변 분들에게 설명 몇 번 듣고 평가표 보면서 필요한 기능 추가하니까 금방 끝낼 수 있었다.
망할 평가포인트가 0이라서 평가 3번 하느라고 오늘은 평가 못 받고 내일이나 받을 수 있을 것 같다.
제출하기 전에 메모리 누수난 거 있는지 다시 확인하고, 마지막으로 노미네트 확인하고 내야지.
푸쉬솹 끝~! ٩(๑>◡<๑)۶
이 시리즈가 여기서 끝나면 통과한 것이고,, Day 11이 생기면 리트를 하는 것이고,,
과연..! 두구두구