Potato
안녕하세요, 감잡니다?🥔 ^___^ 😺 github 바로가기 👉🏻

Algorithm/Baekjoon

[백준] (Swift) 17413번 - 단어뒤집기2

감자 🥔 2022. 2. 7. 14:14
반응형

문제 링크

https://www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

 

내가 푼 풀이

  • <, > 태그로 구별해야하는 문제인것은 알았지만 while문과 if 문을 중첩해서 새로운 array에 넣어주면서 문제를 풀려고했다. 메모리를 너무 많이 차지할 것 같다.
  • 고민해보다가 인터넷을 조금 찾아보니 일반 string으로 더해주고, 초기화해주고, print(terminator) 기능을 이용해서 한줄로 출력할 수 있었다. 
  • terminator 기능을 기억하자. 

▷ 문제 풀이 방식

  • <가 발견되면 tag로 넣어주면서 tag랑 word를 구별하기 시작
  • >가 발견되면 tag로 넣어주고, <> 가 만들어졌으므로 tag는 모두 생성됨. 따라서 tag를 pring해주고 다시 tag 초기화
  • <,> 두개 다 아닌 스트링인데 tag의 첫번째 글자가 < 면 tag를 생성중인것으로 인지하게 하여 tag로 append 해줌
  • 만약 뒤집혀야할 단어가 “ “(공백)이면 word를 리버스해서 거꾸로 출력해주고, “ “(공백)을 넣어주면서 print로 합쳐줌
  • 모두 해당하지 않으면 word에 append 해줌
  • 그리고 이제 마지막에 word에 단어가 남아있다면, reverse 해서 출력해줌.
import Foundation

var s = readLine()!.map{ String($0) }
var tag = ""
var mainWord = ""

for char in s {

    if char == "<" {
        tag.append(char)
        if !mainWord.isEmpty {
            print(String(mainWord.reversed()), terminator: "" )
            mainWord = ""
        }
    }else if char == ">" {
            tag.append(char)
            print(tag, terminator: "")
            tag = ""
    }else {
            if tag.first == "<" {
                tag.append(char)
            } else if char == " " {
                print(String(mainWord.reversed()),terminator: " ")
                mainWord = ""
            }else {
                mainWord.append(char)
            }
    }
}

if !mainWord.isEmpty {
    print(String(mainWord.reversed()), terminator: "")
}

 

▷ print ( 000, terminator: " ") 살펴보기

출력하고자 하는 000 뒤에 바로 terminator구문이 붙어서 한줄로 출력된다.

var a = "11"
var b = "helo"

print(String(a), terminator: "...")
print(String(b), terminator: "////")

 

반응형