일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- web
- Java
- 백준
- War Game
- System
- windosw 문자열
- Stack
- c언어
- HTML
- 미로 탐색 알고리즘
- 파일 시스템
- ftz level13
- LoB
- SWiFT
- 암호수학
- 파이썬
- 정렬 알고리즘
- 두근두근 자료구조
- windosws wbcs
- 스택
- 자료구조
- pwnable.kr
- C
- ftz
- level13
- PHP
- 큐
- 재귀
- 시간복잡도
- OSI
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 프로그래머스 코딩테스트 연습>괄호 변환 본문
반응형
문제풀이
정신차리고 문제만 제대로 보고 그대로 코딩하면 된다. 문제 보고 그대로 코딩해라.....
출력 결과는 제대로 나오나 제출 시 통과하지 못하였는데 문제가 되는 부분은 다음과 같다.
return "("+recursion(v)+")"+u.joined()
위와 같이 해야 하는데
return "("+u.joined()+")"+recursion(v)
이처럼 하였다. 출력 결과는 문제 없는 것 같은데 결과적으로 문제를 제대로 보고 그대로 코딩하면 된다...
만약 문제에서 알고리즘이 설명되어 있지 않다면 절대 못 풀었을지도.....?
코드
import Foundation
print(solution("(()())()"))
print(solution(")("))
print(solution("()))((()"))
print(solution("))(()("))
func solution(_ p:String) -> String {
func recursion(_ pA: [String]) -> String{
if pA.isEmpty{
return ""
}
if rightStr(pA){
return pA.joined(separator: "")
}
var u = balanceStr(pA)
var v = [String]()
if pA.count != u.count{
v = [String](pA[u.count...pA.endIndex-1])
}
if rightStr(u){
return u.joined(separator: "") + recursion(v)
}else{
u.removeFirst()
u.removeLast()
for i in 0..<u.count{
if u[i] == "("{
u[i] = ")"
}else{
u[i] = "("
}
}
return "("+recursion(v)+")"+u.joined()
}
}
func balanceStr(_ pA: [String]) -> [String]{
var index = 0
var left = 0
var right = 0
repeat{
if pA[index] == "("{
left += 1
}else{
right += 1
}
index += 1
}while(left != right && index < pA.count)
return [String](pA[0...index-1])
}
func rightStr(_ pA: [String]) -> Bool{
var stack = [String]()
var top = -1
stack.append(pA.first!)
top += 1
for i in 1..<pA.count{
if top < 0{
stack.append(pA[i])
top += 1
}else{
if stack[top] == "(" && pA[i] == ")"{
stack.removeLast()
top -= 1
}else{
stack.append(pA[i])
top += 1
}
}
}
return top == -1 ? true : false
}
let pArr = p.map{String($0)}
return recursion(pArr)
}
반응형
'Programming > Algorithm & Data Structure' 카테고리의 다른 글
[Swift] 프로그래머스 2021 Dev-Matching: 웹 백엔드 개발자(상반기)로또의 최고 순위와 최저 순위 (0) | 2022.06.28 |
---|---|
[Swift] 프로그래머스 2022 KAKAO BLIND RECRUITMENT신고 결과 받기 (0) | 2022.06.27 |
[Swift] 프로그래머스 코딩테스트 연습 > 짝지어 제거하기 (0) | 2022.05.27 |
[Swift] 프로그래머스 2021 Dev-Matching: 웹 백엔드 개발자(상반기) > 행렬 테두리 회전하기 (0) | 2022.05.19 |
[Swift] 프로그래머스 Summer/Winter Coding(2019) > 멀쩡한 사각형 (0) | 2022.05.18 |