오늘은 적을게 많이 없어서 노서식으로~
< 오늘의 한 일 >
- 문법 다시 훑어보기
- 스위프트 헷갈리는 용어 정리
- 프로그래머스 한 문제 풀기
프로그래머스 Lv.2 - 카펫 문제 풀었음!
https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
맨 처음 코드
import Foundation
func solution(_ brown:Int, _ yellow:Int) -> [Int] {
var width = 0
var length = 0
for i in 1...yellow{
if i * i == yellow{
width = ( brown + 4 ) / 4
length = width
} else {
width = 2 * ( brown + 4) / 7
length = width * 3/4
}
}
return [width, length]
}
열심히 머리 굴려서 나름의 공식 도출해냄,,,그러고 짠 코드
완존 안습이여 ㄱ-
테스트 케이스는 통과했지만 제출하고 오답 파티라 다시 생각...
import Foundation
func solution(_ brown:Int, _ yellow:Int) -> [Int] {
var width = 0
var length = 0
var num = brown + yellow
// ( 가로 -2) * ( 세로 -2 ) = yellow
// 가로 * 세로 = brown + yellow
for i in 1...num{
if num % i == 0{
if (i - 2) * (num / i - 2) == yellow{
width = i
length = num / i
}
}
}
return [width, length]
}
제대로 된 수식 도출..~
을 기반으로 작성한 코드
문제점
: 값을 찾고 난 뒤에도 계속 반복문이 돌아가 비효율
O(n) 시간 걸림
정답처리는 되었지만 더 좋은 코드를 연구해보면~~
import Foundation
func solution(_ brown: Int, _ yellow: Int) -> [Int] {
let total = brown + yellow
for height in 1...Int(sqrt(Double(yellow))) {
if yellow % height == 0 {
let width = yellow / height
if (width + 2) * (height + 2) == total {
return [width + 2, height + 2]
}
}
}
return []
}
이렇게 풀면 복잡도 O(√n)이 됨..!
Int(sqrt(Double(yellow)))
을 잘 기억해두자~
그리고 값 찾으면 바로 리턴해버리기...~
그럼 안녕~~~
'TIL' 카테고리의 다른 글
250418 TIL | 순수함수, 표기법, 생명주기 | 불금엔 카공이지,,,웅웅 (0) | 2025.04.18 |
---|---|
250410 TIL | swift 네트워크 통신 기초 흐름 잡기 (0) | 2025.04.10 |
250330 TIL | 삼각형의 완성조건(1), 문법 다시 훑어보기! (0) | 2025.03.30 |
250329 TIL | XCode Dark / Light Mode | 벡터 이미지 | URL 구조 (0) | 2025.03.29 |
250328 TIL | 기초부터 탄탄히! (0) | 2025.03.28 |