- ๊ดํธ ๋ณํ
-
darklight
sublimevimemacs
Swift
๋ฌธ์ ์ค๋ช
์นด์นด์ค์ ์ ์
๊ฐ๋ฐ์๋ก ์
์ฌํ ์ฝ์ ์ ๋ฐฐ ๊ฐ๋ฐ์๋ก๋ถํฐ ๊ฐ๋ฐ์ญ๋ ๊ฐํ๋ฅผ ์ํด ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์์ค ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ ๋ฌธ์ ์ ์ ๋ฐ๊ฒฌํ๊ณ ์์ ํ๋ผ๋ ์
๋ฌด ๊ณผ์ ๋ฅผ ๋ฐ์์ต๋๋ค. ์์ค๋ฅผ ์ปดํ์ผํ์ฌ ๋ก๊ทธ๋ฅผ ๋ณด๋ ๋๋ถ๋ถ ์์ค ์ฝ๋ ๋ด ์์ฑ๋ ๊ดํธ๊ฐ ๊ฐ์๋ ๋ง์ง๋ง ์ง์ด ๋ง์ง ์์ ํํ๋ก ์์ฑ๋์ด ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
์์ ํด์ผ ํ ์์ค ํ์ผ์ด ๋๋ฌด ๋ง์์ ๊ณ ๋ฏผํ๋ ์ฝ์ ์์ค ์ฝ๋์ ์์ฑ๋ ๋ชจ๋ ๊ดํธ๋ฅผ ๋ฝ์์ ์ฌ๋ฐ๋ฅธ ์์๋๋ก ๋ฐฐ์น๋ ๊ดํธ ๋ฌธ์์ด์ ์๋ ค์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ฐํ๋ ค๊ณ ํฉ๋๋ค.
์ฉ์ด์ ์ ์
'(' ์ ')' ๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์์ ๊ฒฝ์ฐ, '(' ์ ๊ฐ์์ ')' ์ ๊ฐ์๊ฐ ๊ฐ๋ค๋ฉด ์ด๋ฅผ ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ '('์ ')'์ ๊ดํธ์ ์ง๋ ๋ชจ๋ ๋ง์ ๊ฒฝ์ฐ์๋ ์ด๋ฅผ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
์๋ฅผ ๋ค์ด, "(()))("์ ๊ฐ์ ๋ฌธ์์ด์ ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด ์ด์ง๋ง ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ ์๋๋๋ค.
๋ฐ๋ฉด์ "(())()"์ ๊ฐ์ ๋ฌธ์์ด์ ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด ์ด๋ฉด์ ๋์์ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด ์
๋๋ค.
'(' ์ ')' ๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด w๊ฐ ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด ์ด๋ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ํตํด ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด๋ก ๋ณํํ ์ ์์ต๋๋ค.
1. ์ ๋ ฅ์ด ๋น ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ, ๋น ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. 2. ๋ฌธ์์ด w๋ฅผ ๋ "๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด" u, v๋ก ๋ถ๋ฆฌํฉ๋๋ค. ๋จ, u๋ "๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด"๋ก ๋ ์ด์ ๋ถ๋ฆฌํ ์ ์์ด์ผ ํ๋ฉฐ, v๋ ๋น ๋ฌธ์์ด์ด ๋ ์ ์์ต๋๋ค. 3. ๋ฌธ์์ด u๊ฐ "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด" ์ด๋ผ๋ฉด ๋ฌธ์์ด v์ ๋ํด 1๋จ๊ณ๋ถํฐ ๋ค์ ์ํํฉ๋๋ค. 3-1. ์ํํ ๊ฒฐ๊ณผ ๋ฌธ์์ด์ u์ ์ด์ด ๋ถ์ธ ํ ๋ฐํํฉ๋๋ค. 4. ๋ฌธ์์ด u๊ฐ "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด"์ด ์๋๋ผ๋ฉด ์๋ ๊ณผ์ ์ ์ํํฉ๋๋ค. 4-1. ๋น ๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ก '('๋ฅผ ๋ถ์ ๋๋ค. 4-2. ๋ฌธ์์ด v์ ๋ํด 1๋จ๊ณ๋ถํฐ ์ฌ๊ท์ ์ผ๋ก ์ํํ ๊ฒฐ๊ณผ ๋ฌธ์์ด์ ์ด์ด ๋ถ์ ๋๋ค. 4-3. ')'๋ฅผ ๋ค์ ๋ถ์ ๋๋ค. 4-4. u์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ณ , ๋๋จธ์ง ๋ฌธ์์ด์ ๊ดํธ ๋ฐฉํฅ์ ๋ค์ง์ด์ ๋ค์ ๋ถ์ ๋๋ค. 4-5. ์์ฑ๋ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด p๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ฃผ์ด์ง ์๊ณ ๋ฆฌ์ฆ์ ์ํํด ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
๋งค๊ฐ๋ณ์ ์ค๋ช
- p๋ '(' ์ ')' ๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด๋ฉฐ ๊ธธ์ด๋ 2 ์ด์ 1,000 ์ดํ์ธ ์ง์์ ๋๋ค.
- ๋ฌธ์์ด p๋ฅผ ์ด๋ฃจ๋ '(' ์ ')' ์ ๊ฐ์๋ ํญ์ ๊ฐ์ต๋๋ค.
- ๋ง์ฝ p๊ฐ ์ด๋ฏธ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๋ฉด ๊ทธ๋๋ก return ํ๋ฉด ๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์
p | result |
"(()())()" | "(()())()" |
")(" | "()" |
"()))((()" | "()(())()" |
ํ์ด
1.p๊ฐ ๋น์ด์๋์ง ์๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋น์ด์์ง ์๋ค๋ฉด 2๋ก ๋์ด๊ฐ๊ณ ๋น์ด์๋ค๋ฉด return "" ์ผ๋ก ๋ฐํํด์ค๋๋ค.
2.u๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํด ์ฐ์ var count๋ก ๋ณ์๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ p์์ ๊ธ์๋ค์ for๋ฌธ์ ํ์ฉํด ๋ง์ฝ "("๋ผ๋ฉด count์ +1์ ํด์ฃผ๊ณ
")"๋ผ๋ฉด -1์ ํด์ค๋๋ค. ๊ท ํ์กํ ๋ฌธ์์ด์ "("์ ")"์ ๊ฐฏ์๊ฐ ๊ฐ์ ๊ฒ์ ๋๋ค. ์ด๋ count๊ฐ 0์ด๋๋ ๊ฒ์ด๋ฏ๋ก 0์ด๋๋ฉด break๋ฅผ ํด์ค๋๋ค.
2.v๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํด์๋ p์์ u๋งํผ์ ๋บ ๊ฒ์ด๋ฏ๋ก suffix๋ฅผ ํ์ฉํ์ฌ p์ ๊ฐฏ์์์(p.count) u์ ๊ฐฏ์(u.count)๋ฅผ ๋นผ์ค๋๋ค.
3.u๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ธ์ง ํ์ธํ๊ธฐ๋ ")"์ ๊ฐฏ์๊ฐ "("๋ณด๋ค ๋ง๋ค๋ฉด ์ฌ๋ฐ๋ฅด์ง ์์ ๋ฌธ์์ด์ ๋๋ค. ์ด๊ฑฐ ๋ํ count๋ฅผ ํ์ฉํ์ฌ count๊ฐ 0์๋๋ก ๋ด๋ ค๊ฐ๋ค๋ฉด ")" ๊ฐฏ์๊ฐ ๋ ๋ง์ ๊ฒ์ด๋ฏ๋ก breakํด์ค๋๋ค.
์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ด๋ผ๋ฉด
3-1.u๋ฅผ ์์ ๋ถ์ฌ์ฃผ๊ณ solution(v)๋ฅผ ํด์ฃผ๊ณ ๋ฐํํฉ๋๋ค.
๋ง์ฝ ์ฌ๋ฐ๋ฅด์ง ์์ ๋ฌธ์์ด์ด๋ผ๋ฉด ์ฐ์ u๋ฅผ ๋น์ด์๊ฒ ๋ง๋ค๊ณ for๋ฌธ์ ํ์ฉํด u์ ์ฒซ๋ฒ์งธ์ ๋ง์ง๋ง ๊ธ์๋นผ๊ณ ")"๋ผ๋ฉด "("๋ก "("๋ผ๋ฉด ")"๋ก ๋ฐ๊ฟ์ค ๋ํด์ค๋๋ค.
4.๊ทธ๋ฆฌ๊ณ ๋ฐํ์ ๋ค์ solution(v)๋ฅผ ํ๊ณ u๋ฅผ ๋ํด์ค๋๋ค.
์ด๋ ๊ฒ v๊ฐ ""๋ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
ex)()))((
u = (),v=))(( -> () + solution("))((")
u = ))((,v="" -> ( + solution("") + ) + ()
๋ต = ()()()
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
//์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ธ์ง ์๋ ๋ฐฉ๋ฒ "("์๋ณด๋ค ")"๊ฐ ๋ ๋ง์ ๊ฒฝ์ฐ
//๊ท ํ์ก์ธ ๋ฌธ์์ด ์๋ ๋ฐฉ๋ฒ -> "("์ ์์ ")"์ ์๊ฐ ๊ฐ์ผ๋ฉด ๊ท ํ์กํ ๊ฒ
import Foundation
func solution(_ p:String) -> String{
//1.๋น ๋ฌธ์์ด์ด ์๋๋ผ๋ฉด
if !p.isEmpty {
var u = ""
var count = 0
//2 -> u๋ถ๋ฆฌํ๊ธฐ
for char in p{
if char == "(" {
count += 1
u += "("
}else{
count -= 1
u += ")"
}
if count == 0 {
break
}
}
//2 -> v๋ถ๋ฆฌํ๊ธฐ
let v = String(p.suffix(p.count-u.count))
//3 u๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ธ์ง ํ์ธํ๊ธฐ
for char in u{
if char == "("{
count += 1
}else{
count -= 1
}
if count < 0 {
break
}
}
let umap = u.map{String($0)}
//3.์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ด ์๋๋ผ๋ฉด
if count < 0 {
u = ""
continue
}
else{
if umap[i] == "("{
u += ")"
}
else{
u += "("
}
}
}
//4.๊ฒฐ๊ณผ์ u๋ถ์ฌ์ ๋ฐํ
return "(\(solution(v)))\(u)"
}
//3.์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ด๋ผ๋ฉด
//3-1 u์ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ฌ์ ๋ฐํ
return "\(u)\(solution(v))"
}
//1.๋น ๋ฌธ์์ด์ด๋ผ๋ฉด
return ""
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
์ฒ์ ์๋ชป ์ดํดํ๊ณ ํผ ๊ฒ
์ฒ์์ 1,2,3,4๊น์ง ์ํํ๊ณ 4-1๋ถํฐ๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋์จ u๋ฅผ ์ฒซ๋ฒ์งธ ๋ง์ง๋ง์ ์ ๊ฑฐํ๊ณ ๋ค ๊ฑฐ๊พธ๋ก ํด์ฃผ๋ ์ค ์์๋ค.
ex)()))((
u = (), v = ))((
answer = ()
u = ))((,v=""
answer = () + (())
๋ต = ()(()))
์ด๋ ๊ฒ ํธ๋ ๊ฑด ์ค ์์๋ค. ๋ต๋ ์ฌ๋ฐ๋ฅด๊ณ ๊ท ํ์กํ ๊ฒ์ผ๋ก ๋์ค๊ธธ๋ ์ ํ๋ ธ๋์ง ๋ชฐ๋๋๋ฐ ๊ฒฐ๊ตญ ์ฌ๊ท๋ก ํ์ด์ผํ๊ณ ์ํค๋๋ฐ๋ก ํด์ผํ๋ค๋ ๊ฒ์ ์์๋ค.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
import Foundation
func solution(_ p:String) -> String {
var answer = String()
var v = p
while !v.isEmpty {
var u = ""
var count = 0
for p in v{
if p == "(" {
count += 1
u += "("
}else{
count -= 1
u += ")"
}
if count == 0 {
break
}
}
let umap = u.map{String($0)}
for i in u{
if i == "("{
count += 1
}else{
count -= 1
}
if count < 0 {
break
}
}
if count < 0 {
if i == 0{
answer += "("
}
answer += ")"
}
else{
if umap[i] == "("{
answer += ")"
}
else{
answer += "("
}
}
}
}else{
answer += u
}
v = String(p.suffix(v.count-u.count))
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค H-Index Swift (0) | 2020.05.12 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ๊ฐ์ฅ ํฐ ์ Swift (0) | 2020.04.27 |
ํ๋ก๊ทธ๋๋จธ์ค ์์์ฐพ๊ธฐ Level 2 Swift (0) | 2020.04.20 |
ํ๋ก๊ทธ๋๋จธ์ค ์กฐ์ด์คํฑ Swift (0) | 2020.04.09 |
ํ๋ก๊ทธ๋๋จธ์ค ํฐ ์ ๋ง๋ค๊ธฐ Swift (0) | 2020.04.04 |
๋๊ธ