티스토리 뷰

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net


 

문제 요약

  • 문자열 s에서 tag를 제외한 단어를 뒤집은 문자열을 출력하라.

 

풀이 1 - flag 변수 사용

  • 변수 flag로 문자 tag를 체크해 문자 char이 tag일 경우 result에 넣어주고 tag가 아닐 경우에는 stack에 넣어준다.
  • "<" 이 나오면 그전까지 stack에 있던 문자를 pop 해서 result에 추가해준다.
  • 두 단어 사이의 공백이 나왔을 경우에는 stack에 있던 문자를 pop 해서 result에 추가해주고, 공백 또한 result에 추가한다.
  • for문이 종료된 후 stack에 남아있던 문자를 pop해 result에 넣어주는 걸 잊지 말자
import Foundation

let input = readLine()!

var stack: [Character] = []
var result = ""
var flag: Bool = false

for char in input {
    if char == "<" {
        flag = true
        while !(stack.isEmpty) {
            result.append(stack.popLast()!)
        }
        result.append(char)
    } else if char == ">" {
        flag = false
        result.append(char)
    } else if flag {
        result.append(char)
    } else {
        if char == " " {
            while !(stack.isEmpty) {
                result.append(stack.popLast()!)
            }
            result.append(char)
        } else {
            stack.append(char)
        }
    }
}

if !stack.isEmpty {
    result.append(String(stack.reversed()))
}

print(result)

 

'Algorithm > 백준' 카테고리의 다른 글

[BOJ] (Swift) 1935 - 후위 표기식 2  (0) 2022.08.03
[BOJ] (Swift) 10799 - 쇠막대기  (0) 2022.08.03
[BOJ] (Swift) 10866 - 덱  (0) 2022.08.02
[BOJ] (Swift) 1158 - 요세푸스 문제  (0) 2022.08.02
[BOJ] (Swift) 10845 - 큐  (0) 2022.08.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함