티스토리 뷰
728x90
https://programmers.co.kr/learn/courses/30/lessons/60058?language=swift
문제대로 착실히 재귀함수를 구현해도 잘 풀리는 문제..
그래서 2번인듯
접근방법
이 문제는 정말 접근방법을 문제에서 다 준 경우..
문제는 문자열 u가 올바른 괄호문자열인지 판단하는 함수를 만들었었는데
다른분 풀이보고 그냥 첫번째 문자만 열린괄호인지 확인하면 된다는 것을 깨닫고..
차마 이전 코드를 지우지 못해 주석 처리해둔..(이런거 안좋다그랬는데 클린코드가..아까운데 어떡해)
아무튼 머리 별로 안써서 좋았다 ㅎ
소스코드
import Foundation
func solution(_ p:String) -> String {
return makeCorrectStr(Array(p))
}
func makeCorrectStr(_ w:[Character]) -> String {
if w.count == 0 {
return String(w)
}
let divided:(u:[Character], v:[Character]) = divide(w)
var u:[Character] = divided.u
let v:[Character] = divided.v
if isCorrect(u) {
return String(u) + makeCorrectStr(v)
} else {
u.removeFirst()
u.removeLast()
return "(" + makeCorrectStr(v) + ")" + String(u.map{ $0 == "(" ? ")" : "("})
}
}
func divide(_ w:[Character]) -> ([Character], [Character]) {
var openCnt:Int = 0
var closeCnt:Int = 0
for (i, ch) in w.enumerated() {
if ch == "(" {
openCnt += 1
} else {
closeCnt += 1
}
if openCnt == closeCnt {
let u = w[...i]
let v = w[(i+1)...]
return (Array(u),Array(v))
}
}
return ([],[])
}
func isCorrect(_ u:[Character]) -> Bool {
return u.first == "("
// var stack:Int = 0
// for ch in u {
// if ch == "(" {
// stack += 1
// } else {
// stack -= 1
// if stack < 0 {
// return false
// }
// }
// }
// if stack == 0 {
// return true
// } else {
// return false
// }
}
728x90
'알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스] 가사 검색 (Swift) (스터디) (0) | 2022.03.28 |
---|---|
[프로그래머스] 자물쇠와 열쇠 (Swift) (0) | 2022.03.24 |
[프로그래머스] 문자열 압축 (Swift) (0) | 2022.03.23 |
[프로그래머스] 카드 짝 맞추기 (Swift) (0) | 2022.03.23 |
[프로그래머스] 순위 검색 (C++, Swift) (0) | 2022.03.16 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- dfs
- 수학
- 최대힙
- 게임이론
- 자바
- 브루트포스
- 그리디알고리즘
- 투포인터
- 최소힙
- 백준
- 우선순위큐
- 가장 큰 수 Swift
- dp
- 백트래킹
- Swift
- 정렬
- 다이나믹프로그래밍
- 스택
- 알고리즘
- 최단경로
- c++
- 파이썬
- 프로그래머스
- 웹크롤링
- 가장 큰 수 프로그래머스
- 트리
- 토마토
- BFS
- 이분탐색
- 동적계획법
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함