본문 바로가기

STUDY/알고리즘

문자열 거꾸로 정렬하기

Q : 문자열을 뒤에서부터 정렬하는 알고리즘을 작성하세요.

Standard Template library -> library Template Standard 

apple grape melon strawberry ->strawberray melon grape apple



우리가 많이 해보았던 알고리즘은 asdf같은 문자열을 fdsa로 정렬하는 알고리즘입니다.

하지만 이 문제는 문자열 자체를 순서를 바꾸지않고 뒤집는 것이므로 조금 더 응용 능력이 필요합니다.


처음으로 작성한 알고리즘은 stack에 string을 넣는 타입으로 작성하였습니다.

stack은 선입후출이므로 뒤에서 부터 string이 나오게 됩니다. 


[ 첫번째 코드 ] 




공백문자열이 나오면 Stack에 넣어주는 형식으로 작성하였습니다. 

이 결과 2가지의 문제점이 발생하였습니다 (빨강줄)


1. len이 ++되면서 while문을 빠져나가 마지막 문자열을 저장하지 않으므로 

결과값이 library template Standard로 나오게 된다.


2. 공백을 출력시에 아래에서 다음과 같이 출력해주면 공백이 많이 들어있는 string같은 경우에는 공백이 한번밖에 출력되지 않기 때문에


  " library         template       Standard"


와 같은 경우에 


" library template Standard "


와 같이 출력이 된다.



[ 두 번째 코드 ]



마지막에 널이 들어가있다면 현재까지 저장한 string을 스택에 넣어주고 while문을 빠져나오게 예외 처리를 해주고, 

공백문자열도 함께 스택에 넣어주는 방식으로 만들어 주면 아래와 같이 정확하게 결과값이 나오게 됨니다.