BOJ-17413, 단어 뒤집기 2
문제 📑
https://www.acmicpc.net/problem/17413
문제 정리 ▾
- 문자열을 입력받는다.
- 저번 단어 뒤집기 문제와 유사하지만 "<", ">" 특수 문자 안에는 문자열이 그대로 존재(역순 x)해야 한다.
- 특수 문자로 둘러싸지 않은 문자열은 뒤집어 출력이 되어야 한다.
접근 🚶🏻
나의 생각 ▾
- 저번 단어 뒤집기 문제와 유사하기 때문에 특수문자 처리만 잘해주면 된다고 생각했다.
- 가장 중요했다고 생각하는 부분이 특수문자가 시작되는 경우에 그 뒤 문자열들을 어떻게 넣어줄지였다.
나의 해결 ▾
func solution() {
let input = readLine()!
var result: String = ""
var str: String = ""
var check: Bool = true
for word in input {
switch word {
case "<":
result += str.reversed()
result.append(word)
str = ""
check = false
case ">":
result.append(word)
check = true
default:
if check {
if word == " " {
result += str.reversed() + " "
str = ""
} else {
str.append(word)
}
} else {
result.append(word)
}
}
}
if !str.isEmpty {
result += str.reversed()
}
print(result)
}
solution()
- 코드에 관한 내용은 밑에서 살펴보자 😀
코드 리뷰 ▾
for word in input {
switch word {
}
}
- 큰 틀부터 보면 input은 입력받은 문자열이고, word를 통해 input의 요소 하나하나를 접근한다.
- switch문을 통해 word가 어떤 문자인지 체크를 해줄 것이다.
case "<":
result += str.reversed()
result.append(word)
str = ""
check = false
- 첫 번째 case부터 보면 특수문자로 시작할 경우이다.
- 이 특수문자 안에서는 문자열이 그대로 출력이 되어야 하기 때문에 result라는 string형 변수에 "<"를 넣어준다.
- 그리고 특수문자 전에 역순으로 넣어진 문자열이 있을 수 있으니 result에 추가해주기 위해 result += str.reversed()를 해주었다.
- 아래에서 특수문자 시작을 알리기 위해 check라는 변수에 false값을 넣어주었다.
case ">":
result.append(word)
check = true
- 두 번째 case는 특수문자가 닫힐 경우이다.
- ">"가 result 변수에 들어가면 되기 때문에 넣어줌과 동시에 check 변수형을 true값으로 변경시켜서 아래에서 특수문자 끝을 알려주었다.
default:
if check {
if word == " " {
result += str.reversed() + " "
str = ""
} else {
str.append(word)
}
} else {
result.append(word)
}
- 마지막 case는 제일 먼저 check로 시작을 하는데, 이 check는 특수문자 "<"의 시작이 끝이 났는지를 체크하는 부분이다.
- 앞 코드 블록에서도 설명이 되었지만 ">" 닫힌 태그를 만나야만 check가 true가 된다.
- check가 ture 일 경우, 문자열들을 임의의 변수 str(역순을 위한 변수)에 넣어주었다.
- 그리고 띄어쓰기(공백)를 만나면 여태까지 들어갔던 문자열을 가진 str을 역순으로 바꾸어 result 변수에 넣어주었다.
if !str.isEmpty {
result += str.reversed()
}
print(result)
- 마지막 이 부분은 임의의 저장공간 변수 str의 문자가 남아있을 경우를 대비해 안 비어있으면 result에 넣어주며 출력을 하고 마무리가 된다.
Additional 📂
- 생각이 좀 필요했던 문제였던 것 같다.
- 조금이라도 더 간결하고 직관성을 띄는 코드로 구현을 하기 위해 노력은 했는데 아직도 부족은 해 보인다.😅
'Algorithm.zip' 카테고리의 다른 글
[Swift]BOJ-17298 (0) | 2022.02.05 |
---|---|
[Swift]BOJ-10799 (0) | 2022.02.04 |
[Swift]BOJ-10845 (0) | 2022.02.02 |
[Swift]BOJ-1406 (0) | 2022.02.01 |
[Swift]BOJ-9012 (0) | 2022.01.31 |