일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- ftz level13
- Java
- windosw 문자열
- Stack
- 큐
- SWiFT
- 정렬 알고리즘
- C
- ftz
- web
- LoB
- 자료구조
- pwnable.kr
- PHP
- OSI
- 백준
- 재귀
- 미로 탐색 알고리즘
- level13
- 두근두근 자료구조
- 파이썬
- System
- windosws wbcs
- War Game
- 암호수학
- c언어
- 시간복잡도
- HTML
- 파일 시스템
- 스택
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 프로그래머스 코딩테스트 연습>괄호 변환 본문
반응형
코딩테스트 연습 - 괄호 변환
카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를
programmers.co.kr
문제풀이
정신차리고 문제만 제대로 보고 그대로 코딩하면 된다. 문제 보고 그대로 코딩해라.....
출력 결과는 제대로 나오나 제출 시 통과하지 못하였는데 문제가 되는 부분은 다음과 같다.
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 |