[오늘의 Swift 지식] stride 함수 (백준 2742번 기찍 N, 역수 구하기)

2021. 10. 24. 12:00·📌 Swift
-->
백준의 2741번째 문제를 풀고 기찍N 이라는 2742번을 풀다가
오류가 계속 나서 찾아보다가 stride라는 함수를 찾게 되었습니다.

그냥 공부만 하기에는 잊어버릴 것 같고 꾸준히 참고할 거 같아서 정리하였습니다.

 

stride( ) 함수

스크린샷 2021-10-11 오전 4 09 35

 

먼저 stride가 무슨 뜻인지 궁금해서 검색을 해보았는데요. 사전적인 의미는 "보폭"이라네요?

 

코딩에서는 이 의미를 그대로 적용해서 "특정 간격(보폭)만큼 이동"하는 반복을 의미하는 것 같습니다.

또한, 위에 있는 공식문서의 Return Value부분을 보면 "start(from)부터 end(to) 방향으로 가되, end(to)는 포함하지 않는다."라고 작성되어 있습니다.

 

즉, stride(from: to: by: )는 시작값(from)부터 종료값 바로 전까지(to), 지정한 간격(by)만큼 이동하며 반복하게 되겠네요.

 

그럼 이제 백준 2742번 "기찍 N" 문제 예시대로 보겠습니다. 

let number = Int(readLine()!)!

for i in stride(from: number, to: 0, by: -1) {
    print(i)
}
// 입력 : 5
// 출력 : 
// 5
// 4
// 3
// 2
// 1

 

위의 코드를 해설해보자면, number(from)에서 0(to)의 이전 값인 1까지 -1씩 감소하며 출력하는 코드입니다.

입력으로 5를 넣으면, 출력 값으로는 5, 4, 3, 2, 1을 출력하게 되겠네요.

 

 

to: 대신, through: ?

스크린샷 2021-10-11 오전 3 39 57

 

코드를 작성하다가 위의 이미지처럼 to: 대신 through: 를 사용하는 방식이 있더라고요? 그럼 through는 뭐가 다른가 하고 to 대신 through를 사용해봤는데

스크린샷 2021-10-11 오전 3 44 26

 

이미지에서 보이듯이 1이 아닌 0까지 출력되었습니다. 😳

그냥 사용만 해봐도 to: 는 파라미터 값을 포함하지 않고, through는 값을 포함하는거구나! 싶더라고요.

 

그래도 확신이 필요하여 공식문서를 확인해보았습니다.

스크린샷 2021-10-11 오전 4 09 25

 

공식문서를 보니, 이번에는 "end(through) 값도 포함한다." 라고 쓰여있습니다. 그럼 정리해보면 아래와 같이 되겠네요.

  • through: 는 종료값을 포함
  • to: 는 종료값을 제외

따라서 어떤 함수를 써야할지는 문제의 조건과 상황에 따라서 골라 사용하면 될거같네요. 😎

 

 

예시로 오름차순 반복 문제로 to와 through를 한번 더 비교해보겠습니다.

let number = Int(readLine()!)!

for i in stride(from: number, through: 7, by: 2) {
	print(i)
}

 

위와 같이 코드를 작성하고 number의 값이 1이라면, 1부터 7(포함)까지 2씩 증가할 것이기 때문에, 1, 3, 5, 7이 출력되겠죠?

만약, through를 to: 로 바꾸면 어떻게 될까요? 그러면 to:는 본인을 포함하지 않으니, 7을 제외한 1, 3, 5까지만 출력이 될겁니다.

 

 

마무리 정리!

함수 형태 종료값 포함 여부
stride(from: to: by: ) ❌ 포함하지 않음
stride(from: through: by: ) ✅ 포함함

 

  • 보폭을 설정해 반복할 수 있어, 오름차순/내림차순 모두 유용하게 사용할 수 있습니다.
  • 종료값을 포함해야 하는지, 아닌지에 따라 to와 through를 선택하여 사용할 수 있습니다.

 

공부한 내용을 바탕으로 정리하다 보니, 오타나 틀린 내용이 있을 수 있습니다.
틀린 내용이나 오타는 댓글로 알려주시면 감사하겠습니다 :)

 

 

 

'📌 Swift' 카테고리의 다른 글

[Swift] 문자열 나누기 split()과 components() 를 알아보자!  (0) 2022.03.29
[오늘의 Swift 지식] 고차 함수 (map, filter, reduce)  (0) 2022.02.01
[오늘의 Swift 지식] In-Out이란 무엇일까?  (0) 2021.08.24
[오늘의 Swift 지식] 전달인자(Argument)와 매개변수(Parameter)  (0) 2021.08.13
[오늘의 Swift 지식] if let과 guard let의 차이는?  (0) 2021.08.09
'📌 Swift' 카테고리의 다른 글
  • [Swift] 문자열 나누기 split()과 components() 를 알아보자!
  • [오늘의 Swift 지식] 고차 함수 (map, filter, reduce)
  • [오늘의 Swift 지식] In-Out이란 무엇일까?
  • [오늘의 Swift 지식] 전달인자(Argument)와 매개변수(Parameter)
MoriOS
MoriOS
기억하기 위해 기록하는 공간 🖋️
  • MoriOS
    MoriOS
    MoriOS
  • 전체
    오늘
    어제
    • 분류 전체보기 (67) N
      • 📌 Swift (12)
      • 📱 iOS (11)
      • 💡 Algorithm (1)
      • ❕Data structure (4)
      • 🪙 Python (0)
      • ⚙️ Git (3) N
      • 🖋️ TIL Journal (33)
      • 📝 Etc (3)
  • 블로그 메뉴

    • GitHub
  • 인기 글

  • 태그

    swift
    Optional
    제약조건 수정
    커밋 아이콘
    Split
    커밋 이모지
    swift optional
    Codable
    스크롤 길이
    GitHub
    프로그래머스
    Components
    cow 쓰기 복사
    makeconstraint
    TiL
    ios
    git moji
    제약조건 변경
    uikit
    cow 값 타입
    셀 높이
    remakeconstraints
    static
    SnapKit
    후행클로저
    prepareconstraints
    cow 참조 타입
    weak
    updateconstraints
    swift cow
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
MoriOS
[오늘의 Swift 지식] stride 함수 (백준 2742번 기찍 N, 역수 구하기)
상단으로

티스토리툴바