[Swift] 두 정수 사이의 합

2024. 12. 5. 14:47·Apple/Swift
728x90
반응형

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

 

이번 포스팅에서는 프로그래머스 문제인 두 정수 사이의 합 문제 풀이 방법에 대해서 한번 정리를 해보려고 합니다.

 

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

 

문제 설명

먼저 문제부터 살펴 보겠습니다.

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

 

제한 조건

  • a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
  • a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
  • a와 b의 대소관계는 정해져있지 않습니다.

문제 이해

문제는 간단히 말해, 두 정수 a와 b 사이에 포함된 모든 정수의 합을 계산하는 문제입니다.

 

문제 풀기

문제를 해결하기 위해 몇 가지 논리적인 단계가 필요합니다. 저는 크게 3가지로 나누었는데 더 좋은 방법이 있으면 댓글로 공유 부탁드립니다! 

 

먼저 저는 입력값을 정렬했습니다. 이게 무슨 말이냐?

 

우선 정수가 a, b 2가지가 있는데 이 중에서 작은 값은 minValue, 큰 값을 maxValue로 지정해서 변수를 선언해주었습니다.

let minValue = min(a, b)
let maxValue = max(a, b)

 

그리고 등차수열의 합 공식을 활용해주었습니다. 등차수열의 합 공식을 사용한 이유는 a부터 b까지 사이의 수를 더하는 문제이니 당연히 a와 b 사이의 수가 1씩 증가하면서 나타날 것이기 때문에 수열의 특징이 나타나게 되므로 이 공식을 사용해줬습니다.

 

등차수열의 합 공식은 

등차수열의 합 공식

  • S: 수열의 합
  • n: 수열의 항의 개수
  • a: 수열의 첫 번째 항
  • l: 수열의 마지막 항

이렇게 나타낼 수 있습니다.

 

등차수열의 합 공식을 이용하려면 수열의 항의 개수를 알고 있어야 하기 때문에 수열의 항의 개수 구하는 코드도 작성해주었습니다.

let n = maxValue - minValue + 1

 

이제 준비는 다 끝났으니 등차수열의 합 공식을 코드로 구현해보겠습니다.

let sum = n * (minValue + maxValue) / 2

 

등차수열의 합 공식을 코드로 구현하게 되면 위와 같이 나타낼 수 있습니다.

 

전체코드

func solution(_ a:Int, _ b:Int) -> Int64 {
    let minValue = min(a, b)
    let maxValue = max(a, b)
    let n = maxValue - minValue + 1
    
    let sum = n * (minValue + maxValue) / 2
    
    return Int64(sum)
}

여기서 주의할 점(?)은 solution 함수의 리턴값이 Int64이기 때문에 이와 맞춰줘야 하므로 그냥 return sum이라고 적으면 안 되고 위 코드처럼 return Int64(sum)으로 작성해주어야 합니다.

(물론 리턴값이 그냥 Int라면 return sum도 가능!!)

 

시간 복잡도 분석

위 코드는 반복문 없이 수열의 합 공식을 사용했기 때문에 시간 복잡도는 O(1)입니다. 즉, 입력값의 크기에 상관없이 항상 일정한 시간 내에 결과를 반환합니다. 

 

회고 🎵

이번 문제를 풀면서 등차수열의 합 공식을 활용한 효율적인 해결 방법을 다시 한번 체감할 수 있었습니다. 처음에는 for 반복문을 사용해 하나씩 더하는 방식으로 접근했지만, 수가 클수록 시간이 오래 걸린다는 문제를 발견했고 이를 보완하기 위해 수학 공식을 적용했고, 코드가 훨씬 간결해지면서 성능도 크게 향상되었습니다.

 

이 문제를 풀면서 아쉬운 점은 초기 코드 작성 시에 반복문과 조건문을 사용하면서 비효율적인 코드를 작성하려고 했는데, 이런 실수를 줄이기 위해 문제를 수학적으로 접근할 수 있도록 연습을 더 해야겠다고 느꼈습니다..!

 

오늘은 여기까지 :)


감사합니다.

 

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

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

728x90
반응형

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

[Swift] Subscript 이해하기  (4) 2024.12.30
[Swift] Actor 이해하기 (2/2)  (4) 2024.12.15
[Swift] 삼총사 문제 풀이 및 회고  (6) 2024.11.30
[Swift] stride와 enumerated 알아보기  (2) 2024.11.24
[Swift] 과일 장수 문제 풀이 및 회고  (4) 2024.11.20
'Apple/Swift' 카테고리의 다른 글
  • [Swift] Subscript 이해하기
  • [Swift] Actor 이해하기 (2/2)
  • [Swift] 삼총사 문제 풀이 및 회고
  • [Swift] stride와 enumerated 알아보기
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (207) N
      • Apple (125) N
        • iOS (22)
        • visionOS (4)
        • Swift (68) N
        • UIKit (2)
        • SwiftUI (23)
        • 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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[Swift] 두 정수 사이의 합
상단으로

티스토리툴바