https://school.programmers.co.kr/learn/courses/30/lessons/12954
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
* x만큼 간격이 있는 n개의 숫자 *
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해
x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다.
다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
* 제한조건 *
"x는 -10000000 이상, 10000000 이하인 정수"
"n은 1000 이하인 자연수"
문제를 잘 살펴 봅시다!
함수 solution은 정수 x와 자연수 n을 입력 받아,
x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 해요
제한조건을 만족하는 함수, solution을 완성해주세요.
자, 모든 문제엔 답이 있듯이 문제만 보았을 때 어떠한 로직으로
이 알고리즘을 풀어나아가야 할지 알 수 있죠.
먼저,
정수 x 자연수 n을 입력받는 것으로 어떤 구문이 생각나시나요?!
정수와 자연수를 int(정수) 로 받아들일 수 있도록 로직 세팅을 해주어야 겠죠?!
func solution(_ x: Int, _ n: Int) -> [Int] { // x와 n을 입력으로 받아 정수로 반환
위 코드와 같이 정의를 해줌으로써
x라는 정수와 n이라는 자연수를 입력으로 받아
정수 배열을 반환시켜줄 수 있도록 세팅해줍시다!
다음으로 우리가 정수 x 그리고 자연수 n을 입력 받을 수 있도록 숫자들을 담을 곳이 필요하겠죠?!
그렇다면 배열 자료구조를 사용해 우리가 배열변수를 하나 만들어줍시다!
var result = [Int]()
result 라는 배열변수를 만들어주고, 그 안에 배열선언을 해줍시다!
우리가 배열을 넣기 위해서는 " [] " 대괄호를 사용해야 하죠?
대괄호 안에 아무 숫자도 넣지 않을 경우에는 빈 배열을 의미 하게 되는데,
그안에 int넣어 배열이 정수형 데이터만 포함하게 선언 해 주고
그 배열을 생성 및 초기화 시켜줄 수 있도록 괄호"()"를 넣어줍시다.
꿀팁 & 기본사항 :
괄호"()"안에 데이터를 넣으면 초기화가 안되는 것이며,
데이터를 넣지 않으면 아무것도 안들어 있기 때문에
없는 데이터 즉, 초기화가 되는 것입니다.
즉, 대괄호"[]"는 빈 배열을 의미하고, 괄호"()"는 배열을 초기화하는 데 사용되는 것이죠~
[Int]는 해당 배열이 정수형 데이터를 포함할 것임을 나타내는 것이 되니까
"result" 라는 배열은 정수형 데이터를 담을 빈 배열로 초기화 됨을 의미 하게 되겠죠~
다음으로 우리가 문제를 또 잘 보면
x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴 해야 한다고 써 있자나요~?
그렇다면, 이문제의 핵심은 " x부터 시작해서~ x씩 증가 ", " 숫자를 n개 반환 " 이 되겠죠!
그러면 "x부터 시작해서~" 라고 명시 되어있기 때문에
x를 지니는 변수를 만들거나 혹은 함수의 매개변수로 받은 x자체를 직접 사용해도 되는 구문이 되는 것이고
저는 x를 담고 있는 "currentValue"이라는 변수를 만들고 그안에 설정한 함수 매개변수 x를 넣도록 할께요~!
var currentValue = x
그리고 문제에서"" x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 한다 "라고 명시 되어있죠?
x씩 증가하는 숫자라는 것은 결국엔 어떠한 값을 계속 반복해야한다는 뜻이 되는 것이며
우리는 반복문인 for-in문이 필요하게 되는 것이죠!
그리고 "숫자를 n개를 리턴하라" 라고 명시 했기 때문에
n번 반복하면서 숫자를 생성하는 것을 의미하고 0부터 n-1까지의 정수 범위를 나타내줘야겠죠?
for _ in 0..<n {
여기서는 시작 값이 0이고 종료 값이 n-1인 정수의 집합을 나타내는 겁니다~
이렇게 반복문을 작성하면 n번 반복하게 되는 것이죠!!
이렇게 반복문의 구조는 잡았죠~!
그러면 이제 반복문을 열었으니 반복할 구문을 생성해야겠죠 ㅎㅎ
이 구문에서는 알고리즘을 풀어나아가야 할 문제에요!
여기서부터는 제가 지금까지 한 행동들을 살펴볼 시간이에요~!
구조를 짰으니 이제 구조를 사용할 차례라는 것이죠!
제가 result라는 변수에 정수 배열을 선언하고 초기화를 시켰고
정수"x"를 "currentValue" 라는 변수에 넣었죠
이제 퍼즐 맞추기를 해야해요!
이제 저는 배열 메서드와 연산자등을 활용해서
이문제를 풀어 나아가야 한다는 뜻이죠
"result" 라는 변수는 지금 정수배열로 초기화 되어있으니 이안에
숫자를 생성할 때마다 그 값을 결과 배열에 추가 하는 구문이 필요해요
그래서 .append 라는 메서드를 사용할께요!
result.append(currentValue)
이렇게 사용하면 현재의 currentValue를 result 배열에 추가하는 것이 되고 풀어보면
처음에는 x가 currentValue에 들어가 있기 때문에, x부터 시작하는 것이 보장되는 것이고
각 반복마다 currentValue는 x씩 증가하게 되는 구문이 돼요!
그리고 x씩 증가시키면서 리스트의 다음 값을 계산하고
추가하는 구문 즉, 다음에 추가할 숫자를 결정하는 구문이 필요한 것이며
currentValue에 x를 더하는 구문이 필요하죠
이를 위해 우리는 대입연산자(+=)가 필요하게 되는 것이죠!
currentValue += x
}
이걸 간단하게 설명하면 "다음 숫자를 생성하기 위해 currentValue를 x만큼 증가" 라고 하고
각 숫자를 생성할 때마다 x씩 증가하는 값을 생성하여
결과 배열에 추가하기 위한 조치가 되는 거죠!
x만큼 증가시키면서 다음 숫자를 생성하는 것을 의미 해요~!
마지막으로 이제 result값을 반환하기만 하면 됩니다!
return result
}
총코드는 아래와 같아요~!
func solution(_ x: Int, _ n: Int) -> [Int] {
var result = [Int]() // 결과를 담을 빈 배열을 생성
var currentValue = x // 현재 숫자를 나타내는 변수를 초기화
for _ in 0..<n { // 0부터 n-1까지의 범위에 대해 반복
result.append(currentValue) // 현재 숫자를 결과 배열에 추가
currentValue += x // 다음 숫자를 생성하기 위해 x를 증가
}
return result // 결과 배열을 반환
}
'IOS > Swift-Algorithm (Programmers)' 카테고리의 다른 글
[Swift]Programmers - 문자열을 정수로 바꾸기 (0) | 2024.02.20 |
---|---|
[Swift] Programmers - 자연수 뒤집어 배열로 만들기 (0) | 2024.02.19 |
[Swift] Programmers - 나머지가 1이 되는 수 찾기 (0) | 2024.02.19 |
[Swift] Programmers - 약수의 합 (0) | 2024.02.19 |
[Swift] Programmers - 자릿수 더하기 (0) | 2024.02.19 |