[Swift] n의 배수 고르기 문제 회고

2024. 11. 14. 14:42·Apple/Swift
목차
  1. 문제
  2. 내가 풀었던 방식
  3. 해결 코드
  4. 정리
  5. 느낀 점
728x90
반응형

안녕하세요! 피피아노입니다 🎵

 

이번 포스팅에서는 n의 배수 고르기 알고리즘 문제 회고를 작성해보려고 합니다.

 

그럼 바로 시작하겠습니다!

 

문제

n의 배수 고르기 문제는 정수 n과 정수 배열 numlist가 매개변수로 주어지고, numlist에서 n의 배수가 아닌 수들을 제거한 배열을 return하도록 코드를 작성하는 문제입니다.

 

내가 풀었던 방식

제가 풀었던 문제 방식은

import Foundation

func solution(_ n:Int, _ numlist:[Int]) -> [Int] {
    var result: [Int] = []
    
    for i in numlist {
        if i % n == 0 {
            result.append(i)
        }
    }
    return result
}

이렇게 작성하였습니다. 

 

먼저 result 변수를 선언해주고 for문을 사용해서 numlist 안에 있는 정수들을 모두 한번씩 돌도록 작성하였고 for문 안에서 if문에서 n의 배수에 해당되는 수들만 append 메서드로 result 변수에 넣어주었습니다.

 

*append 메서드란?

: append 메서드는 Swift에서 배열에 새로운 요소를 추가할 때 사용하는 메서드로 배열의 마지막에 새로운 값을 넣을 수 있게 해줍니다.

 

물론 이렇게 해도 의도한대로 코드는 돌아가지만 테스트 결과 2군데에서 시간초과가 발생하는 것을 파악 했습니다.

 

원인을 살펴보았고 반복문을 통해 매번 numlist 요소를 확인하고 append하는 과정에서 효율성이 떨어질 수도 있겠다라는 생각이 들었습니다. 

해결 코드

이를 해결하기 위해 다른 메서드를 사용하는 것을 고려해보았고 좀 더 빠르게 원하는 조건만 뽑아 내기 위해서 filter 메서드를 사용해보았습니다.

import Foundation

func solution(_ n:Int, _ numlist:[Int]) -> [Int] {
    return numlist.filter{ $0 % n == 0 }
}

그렇게 해서 작성한 코드가 이 코드입니다. 한 눈에 봐도 훨씬 간결하죠?

 

이렇게 하고 실행해보니 시간복잡도를 해결할 수 있었습니다.

 

정리

정리를 해보자면 처음에 저는 for문과 if문을 이용해서 원하는 조건만 특정 변수에 넣어주고 해당 변수를 리턴하는 방식으로 코드를 구현했지만 시간 복잡도에서 문제가 발생하였고 이러한 부분을 해결하기 위해 filter 메서드를 이용한 코드를 작성하였습니다.

 

느낀 점

항상 코드를 구현 하는 것에만 급급해서 자꾸 시간 복잡도에서 문제가 생기는데 조금 더 여유 있게 생각해보고 구현하는 것에 성공 했다면 더 간결하게 작성하거나 다른 방법으로 구현하는 방법도 생각을 해봐야겠습니다.


감사합니다.

 

잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!

궁금하신 부분은 댓글로 질문 부탁드립니다!

728x90
반응형

'Apple > Swift' 카테고리의 다른 글

[Swift] 과일 장수 문제 풀이 및 회고  (4) 2024.11.20
[Swift] 제곱근 판별하기  (6) 2024.11.16
[Swift] 배열의 유사도 회고  (11) 2024.11.08
[Swift] Actor 이해하기 (1/2)  (27) 2024.11.04
[Swift] URL 살펴보기  (2) 2024.08.07
  1. 문제
  2. 내가 풀었던 방식
  3. 해결 코드
  4. 정리
  5. 느낀 점
'Apple/Swift' 카테고리의 다른 글
  • [Swift] 과일 장수 문제 풀이 및 회고
  • [Swift] 제곱근 판별하기
  • [Swift] 배열의 유사도 회고
  • [Swift] Actor 이해하기 (1/2)
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록

P_Piano님의
글이 좋았다면 응원을 보내주세요!

응원하기
응원은 창작의 힘

이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.

카카오 계정으로 누구나

응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.

응원 댓글 강조

글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.

쉬운 결제

응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.

응원 수익은 창작자에게 큰 힘이 됩니다.
응원 금액
응원 댓글
  • 창작 활동에 대한 감사와 격려의 의미로 창작자를 응원합니다.
  • '응원하기'는 자발적 결제이므로 청약철회(환불) 불가능합니다.
  • '응원하기'는 만 14세 이상 인증 사용자만 이용할 수 있습니다. 만 19세 미만 미성년 회원의 경우, 법정대리인이 응원하기 결제 이용에 동의하지 않으면 미성년자 본인 또는 법정대리인이 그 결제 내용을 취소할 수 있습니다.
  • '응원하기' 이용을 위한 자세한 내용은 티스토리 이용약관 및 카카오 유료서비스 이용약관을 따릅니다.
(주) 카카오 대표이사 정신아
사업자 등록 번호 120-81-47521
통신판매업신고번호 제2015-제주아라-0032호
주소 제주특별자치도 제주시 첨단로 242(영평동)
호스팅사업자 (주)카카오
고객센터 1577-3754
이메일 help.notice@kakaocorp.com
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (201) N
      • Apple (119) N
        • iOS (22)
        • visionOS (4)
        • Swift (65) N
        • UIKit (2)
        • SwiftUI (20)
        • RxSwift (2)
        • Xcode (4)
      • C언어 (5)
      • C++ (8)
      • Dart (1)
      • Python (3)
      • JavaScript (17)
      • Git (1)
      • CS (39)
        • 디자인 패턴 (6)
        • 네트워크 (20)
        • 운영체제 (8)
        • Database (5)
        • 자료구조 (0)
      • IT 지식 (2)
      • IT 뉴스 (4)
      • 출처 표기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SWIFT
    코딩테스트
    Initializers
    ios
    옵셔널
    운영체제
    배열
    메서드
    프로퍼티 래퍼
    이니셜라이저
    클래스
    프로세스
    자바스크립트
    디자인패턴
    combine
    제어문
    UIKit
    Xcode
    비동기
    네트워크
    Optional
    swiftUI
    스위프트
    visionOS
    연산자
    Vision Pro
    오블완
    티스토리챌린지
    변수
    함수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[Swift] n의 배수 고르기 문제 회고

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.