Notice
Recent Posts
Recent Comments
Link
大器晩成
반복문 (For문) 본문
반복문(Loop)은 프로그래밍에서 특정 코드 블록을 여러 번 실행할 수 있도록 하는 제어 구조입니다. 반복문을 사용하면 동일한 작업을 반복적으로 수행하거나, 일정한 조건이 만족될 때까지 코드를 실행할 수 있습니다. 반복문은 효율적인 코드 작성과 작업 자동화를 가능하게 합니다.
반복문의 종류
- for 반복문: 지정된 횟수만큼 코드를 반복 실행합니다.
- while 반복문: 조건이 참인 동안 코드를 반복 실행합니다.
- repeat-while 반복문: 코드를 먼저 한 번 실행한 후, 조건이 참인 동안 반복합니다.
For 반복문
기본 구문
for <루프(반복)상수> in <순회대상> {
<실행할 구문>
}
또는
for 변수 in 범위/문자열/컬렉션(배열,딕셔너리,set) {
// 실행할 코드
}
- 순회 대상은 주로 순번을 가지는 집단 자료형이나 또는 범위를 가지는 데이터 등이 사용되는데, 이 대상의 길이나 포함하고 있는 아이템의 개수만큼 구문이 반복됩니다.
- 루프상수는 구문이 반복될 때마다 순회 대상이 포함하고 있는 개별 아이템들을 차례로 넘겨받아 임의로 저장하고, 실행블록 내에서 사용할 수 있습니다. 루프 구문이 순회할 때마다 자동으로 재선언되므로 let 키워드를 사용하여 직접 선언할 필요가 없습니다.
- for문 내부에서는 외부에 선언된 변수에는 접근이 가능합니다.
- for문 내부에서 새롭게 선언한 변수에는 외부에서 접근이 불가능합니다.
#1
for c in "String" {
print(c) // 상수 c는 character 타입
}
//출력: S
//출력: t
//출력: r
//출력: i
//출력: n
//출력: g
#2
for row in 1...5 {
print(row)
}
//출력: 1
//출력: 2
//출력: 3
//출력: 4
//출력: 5
#3
for row in 1...9 {
print("2 X \(row) = \(row*2)")
}
//출력: 2 X 1 = 2
//출력: 2 X 2 = 4
//출력: 2 X 3 = 6
//출력: 2 X 4 = 8
//출력: 2 X 5 = 10
//출력: 2 X 6 = 12
//출력: 2 X 7 = 14
//출력: 2 X 8 = 16
//출력: 2 X 9 = 18
#4
var name:String = "Zeroubug"
for i in 1...3 {
print(name)
}
//출력: Zerobug
//출력: Zerobug
//출력: Zerobug
#5
for year in 1940...2017 {
print("\(year)년도")
}
print("\(year)년도") // year는 For 루프 내에 변수이기 때문에 밖에서 사용 불가
#6 배열 등 컬렉션 타입에서도 사용 가능
let list = ["Swift", "Programming", "Language"]
for str in list {
print(str)
}
//출력: "Swift"
//출력: "Python"
//출력: "Java"
for str in ["Swift", "Programming", "Language"] {
print(str)
} // 위에 for문과 동일한 출력
루프상수의 생략
for ~ in 구문을 사용할 때 루프 상수가 필요하지 않는 경우 _(언더바, 와일드 카드 패턴)를 사용하여 루프 상수를 생략할 수 있습니다.
#1
for _ in 0...10 {
print("hello")
} #출력: hello가 10번 출력
#2
let padchar = "0"
var keyword = "3"
for _ in 1...5 {
keyword = padchar + keyword
}
print("\(keyword)") // 출력: 000003
#3
let _ = "문자열"
- 일반적으로 상수/변수로 저장할 필요 없이 생략되는 경우에도 사용된다.
for 범위에서 많이 사용되는 함수
- (1...5).reversed(): 숫자를 역순으로 정렬하는 함수
- stride(from: 시작점, to: 끝지점, by: 간격): 숫자를 특정간격으로 범위를 생성하는 함수 (끝지점을 포함하지 않음)
- stride(from: 시작점, through: 끝지점, by: 간격): 숫자를 특정간격으로 범위를 생성하는 함수(끝지점를 포함)
#1 역순으로 바꾸기
for number in (1...5).reversed() {
print(number)
} //출력: 5,4,3,2,1
#2 홀수 또는 홀수만 뽑아내기
for number in stride(from: 1, to: 15, by:2) {
print(number)
} //출력: 1,3,5,7,9,11,13
#역순으로 홀수 뽑아내기 1
for number in stride(from: 1, to: 15, by:2).reversed() {
print(number)
} //출력: 13,11,9,7,5,3,1
#다양한 활용 방법
for number in stride(from: 15, to: 1, by:-2).reversed() {
print(number)
} //출력: 3,5,7,9,11,13, 15
#다양한 활용 방법
for number in stride(from: 15, to: 1, by:-2) {
print(number)
} //출력: 15,13,11,9,7,5,3
- stride()와 reversed() 같이 쓰면 우선적으로 stride함수가 실행되고, 나온 숫자들을 기준으로 reversed 함수가 실행됩니다. 그 이후 정렬된 숫자를 루프상수에 하나씩 대입해서 출력하게 됩니다..
for ~ in 구문의 중첩
흔히 다중 루프 또는 두 개의 루프 구문이 중첩된 코드를 별로도 이중 루프라고 부릅니다.
#구구단 코드
for i in 1..<10 { // 반 닫힘 범위 연산자
for j in 1...9 { // 닫힌 범위 연산자
print("\(i) * \(j) = \(i*j)")
}
}
# 다이아 몬드
let diamond = 6
for i in 0..<diamond {
for j in 0..<diamond - i{
print(" ", terminator: "")
}
for k in 0...i*2{
print("*", terminator: "")
}
print()
}
for i in 1..<diamond {
for j in diamond - i...diamond {
print(" ", terminator: "")
}
for k in i*2..<diamond * 2 - 1 {
print("*", terminator: "")
}
print()
}
//출력 결과"
*
***
*****
*******
*********
***********
*********
*******
*****
***
*
# 문제 stride 함수 사용해서 다이아몬드 짜보기
for i in stride(from: 0, to: diamond, by: 1) {
for _ in stride(from: diamond - 1, to: i, by: -1) {
print(" ", terminator: "")
}
for _ in stride(from: 0, through: i * 2, by: 1) {
print("*", terminator: "")
}
print()
}
for i in stride(from: diamond - 2, through: 0, by: -1) {
for _ in stride(from: diamond - 1, to: i, by: -1) {
print(" ", terminator: "")
}
for _ in stride(from: 0, through: i * 2, by: 1) {
print("*", terminator: "")
}
print()
}728x90
'iOS > Swift 문법' 카테고리의 다른 글
| 함수(Function) (0) | 2024.11.07 |
|---|---|
| 반복문 (While문) (5) | 2024.11.06 |
| 삼항연산자 (0) | 2024.11.01 |
| 튜플(Tuple) (0) | 2024.11.01 |
| 조건문(switch) (3) | 2024.11.01 |