티스토리 뷰
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
- 이분탐색
- 가장 큰 수 Swift
- 최소힙
- c++
- 수학
- 브루트포스
- 파이썬
- 정렬
- 트리
- 백준
- 백트래킹
- dp
- 최단경로
- 자바
- 다이나믹프로그래밍
- 웹크롤링
- 토마토
- 동적계획법
- 가장 큰 수 프로그래머스
- Swift
- BFS
- 최대힙
- 게임이론
- 우선순위큐
- 그리디알고리즘
- 스택
- 알고리즘
- dfs
- 투포인터
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함