일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- c언어
- 카카오 2019
- 카카오
- 카카오 2018
- 프로그래머스 답
- 이미지학습
- Python
- 머신러닝
- kakao 2018
- 소수
- swift 배열
- supervisely
- 카카오 2021
- roboflow
- 문제
- 최솟값 만들기
- swift 시작
- 날씨 앱
- Siwft
- ios 개발 시작
- fast.ai
- 스위프트
- 카카오 2020
- swift
- coco 데이터셋
- SwiftUI
- 데이터셋 만들기
- 프로그래머스
- Kakao
- 파이썬
Archives
- Today
- Total
잡초의 일지
[Swift] 프로그래머스 | 코딩테스트 연습 -> 연습문제 -> 올바른 괄호 본문
728x90
반응형
SMALL
func solution(_ s:String) -> Bool
{
var ans:Bool = false
let arr: [Character]? = Array(s)
var stack: [Character] = []
if let arr = arr {
if arr[0] != ")" {
for index in arr {
if index == "(" {
stack.append("(")
}else{
if stack.count > 0 {
stack.remove(at: stack.count-1)
}
}
}
if stack.count < 1 {
ans = true
}else{
ans = false
}
}else{
ans = false
}
}
return ans
}
signal: illegal instruction (core dumped) 이라는 에러가 자꾸 뜨면서 테스트에서 실패했다.
이 에러는 배열이 index out of range거나, 옵셔널, 혹은 잘못된 수식 때문에 생긴다고 하였다.
index out of range인 경우나 옵셔널이 문제인것 같았다.
그래서 혹시 stack 배열 문제인가 싶어서 stack의 배열이 무언가 있을때만 remove하도록 했더니, 작동되었다.
그러나, 얼핏 보기에도 많은 for와if문의 난도질 같다는 느낌이 든다.
그래서 다른 사람들의 코드를 보면서 최적 코드는 무엇인지 보았다.
그러고 나서 생각해봤더니,
무조건 처음에 ")" 이 나오는경우는 false이고, 무조건 "(" 부터 시작한다.
그리고 ")" 이 있으면 하나의 괄호가 완성되는것이다.
그렇게 치면, "(" 와 ")" 이 하나의 완성된 괄호 쌍을 이루는 것이다. 따라서 true가 되려면 "("의 갯수와 ")"의 갯수가 같아야 한다.
그래서 다른 코드를 참고해서 위의 생각대로 코드를 짜 보았다. (이게 정확성 & 효율성이 더 높았다.)
func solution(_ s:String) -> Bool
{
var ans:Bool = false
var openCharacterCount: Int = 0, closeCharacterCount: Int = 0
for index in s {
switch index {
case "(":
openCharacterCount += 1
case ")":
closeCharacterCount += 1
default:
break
}
guard openCharacterCount >= closeCharacterCount else {
break
}
}
ans = openCharacterCount == closeCharacterCount
return ans
}
그리고 무조건 "(" 이 ")" 보다 많거나 둘의 갯수가 같아야 한다. 아니라면, 괄호의 짝이 잘못되었으므로 false이다.
728x90
반응형
LIST
'[코딩] 문제풀기 > Swift' 카테고리의 다른 글
[Swift] 프로그래머스 | 코딩테스트 연습 -> 연습문제 -> 짝수와 홀수 (0) | 2021.02.18 |
---|---|
[Swift] 프로그래머스 | 코딩테스트 연습 -> 탐욕법(Greedy) -> 큰 수 만들기 (0) | 2020.08.24 |
[Swift] 프로그래머스 | 코딩테스트 연습 -> 연습문제 -> 최솟값 만들기 (0) | 2020.07.28 |
[Swift] 프로그래머스 | 코딩테스트 연습 -> 연습문제 -> 피보나치 수 (0) | 2020.07.26 |
[Swift] 프로그래머스 | 코딩테스트 연습 -> Summer/Winter Coding(~2018) -> 소수 만들기 (0) | 2020.07.25 |
Comments