내일배움캠프 앱개발 iOS 트랙 본캠프 1주차
Today I Learned
# 프로그래머스 문제 _ 링크 :: 제일 작은 수 제거하기 (Swift)
# 발생한 에러
알고리즘 문제를 풀다가 처음으로 시간초과를 마주했다.
시간초과는 테스트 케이스 1번에서만 발생했지만, 다른 테스트 케이스들도 이상하게 오래 걸렸다.
# 오류를 낸 코드
func solution(_ arr:[Int]) -> [Int] {
guard arr.count != 0 else { return [-1] }
let result = arr.filter{ $0 > arr.min()! }
return arr.count <= 1 ? [-1] : result
}
# 문제점?
시간 초과라고 검색하니 똑같은 걸 계속 연산하면 그럴 수 있다고 했다.
특히 메서드를 사용하는 경우 반복 연산을 조심해야 한다고...
내 경우, filter를 사용한 반복연산을 하고 있었다.
그리고 그 중에서 문제를 일으킬 만한건 요소중 제일 작은 값을 구하는 min() 메서드밖에 없다고 판단했다.
주어진 배열 arr의 제일 작은 수를 구하는 arr.min()! 부분을 상수로 빼내고 다시 계산을 돌렸다.
# 제대로 푼 풀이
func solution(_ arr:[Int]) -> [Int] {
guard arr.count != 0 else { return [-1] }
let minValue = arr.min()!
let result = arr.filter{ $0 > minValue }
return arr.count <= 1 ? [-1] : result
}
일단 1번도 제대로 통과 되었고 나머지도 시간이 많이 줄었다.
확실히 filter 안에서 메서드를 반복 연산을 돌린게 문제였나 보다.
메서드를 사용할 경우에는 한 번만 연산하고 그 값을 활용하는 방향으로 풀어야겠다.
배열의 정확한 길이가 조건으로 나오지 않았으니까 1번은 엄청나게 긴 배열이 arr로 주어진 것일까?
그것은 나는 모르는 일이다...
# 덤으로 하는 주저리
오늘은 튜터님의 TIL 특강이 있었다.
평소에도 기록하는 걸 즐기는 편이라 이런 거 쓸 때 크게 어렵지는 않았는데, 내용 목차를 어떻게 할 지는 고민을 하고 있었다.
마침 특강 내용중에 관련된 부분이 있어 기뻤다.
그 중에 문제 해결 과정 유형으로 쓴 TIL 을 유심히 보고 오늘은 그 양식대로 적어봤다.
맘에 드니까 알고리즘 관련 TIL을 쓸 때는 이 목차를 사용해야겠다!!
# 문제 해결 과정 TIL
- 발생 에러, 버그 작성
- 오류 발생 코드 작성
- 문제점 분석, 가설 세우기
- 원인은 무엇이고 어떻게 해결했는지
- 해결 과정 중 느낀 점, 개선 방안 작성
'TIL' 카테고리의 다른 글
[TIL] 2023.11.28 | [계산기 (1/n)]storyboard UIButton UILabel 사용, Swift 사칙연산 구현하기 (0) | 2023.11.28 |
---|---|
[TIL] 2023.11.27 | 깃허브 온갖 에러를 보다 (0) | 2023.11.27 |
[TIL] 2023.11.23 | 고차함수 filter(_:) (0) | 2023.11.23 |
[TIL] 2023.11.22 | Git, Github (0) | 2023.11.22 |
[TIL] 2023.11.21 | 상속 Inheritance 재정의(오버라이딩) Overriding (1) | 2023.11.21 |