티스토리 뷰
안녕하세요? 멍구입니다. ^-^//
오늘도 간단한 문제를 한번 풀어볼 건데요.
swift언어의 반복문을 다양한 방식으로 활용해서 구구단을 출력하는 백준 알고리즘 문제를 풀어보겠습니다.
오늘 swift언어로 풀어볼 문제는 백준 2739번, 구구단입니다. 바로 가보겠습니다.
백준 2739 구구단 알고리즘 문제 설명
구구단 문제는 백준 단계별 문제 중 기초문제에 해당합니다. 반복문 기초문제입니다.
단순 구구단 출력문제로, 시간제한과 메모리 제한을 크게 신경 쓸 필요는 없을 것 같습니다.
구구단 단수, N을 입력 받았을때 해당 값의 구구단 값을 위와 같이 출력해주면 됩니다.
어떻게 출력할 수 있을까요? N을 입력 받으면 1 ~ 9까지의 수를 반복문 순회하면서 구구단 값을 출력해주면 되겠습니다.
그렇다면 이어서 구구단 백준문제를 swift언어, 반복문을 사용해서 풀어보도록 하겠습니다.
백준 2739 구구단 swift 반복문(for-in, forEach) 활용 문제풀이
먼저 정수를 입력받아야겠죠? 1 ~ 9 범위의 값이 들어올 테니, 입력값을 그대로 정수형으로 강제변환해주면 됩니다.
정수 입력을 받을때 제시된 입력 범위 내에서만 입력이 주어지고, 정수 입력이 됨을 보장하므로, 강제언래핑을 사용해도 문제 없습니다.
반복문을 통해 이제 구구단 출력을 할 건데요. 다양한 방식으로 반복문을 활용해서 출력해보도록 하겠습니다.
1) for in 반복문으로 구구단 출력하기
먼저, for in 루프 반복문으로 결과 값을 출력하는 예시입니다. 1 ~ 9의 값을 반복하는 반복자 i를 활용해서 N * i의 값을 순차적으로 출력하게 됩니다. print()문을 10번 호출하면서 출력하게 됩니다.
이 외에도 부동소수점 단위로 반복문을 실행할 수 있는 stride(부동소수점을 사용하지 않는 해당 문제에서는 적절하지 않습니다.), for문과 대체 사용할 수 있는 while, repeat-while문 등의 다양한 방법이 있으니, 다양한 방법으로 문제를 풀어보시면 좋을 것 같습니다.
2) forEach 반복문으로 구구단 출력하기
for in 이외에 forEach라는 고차함수를 사용할 수 있는데요. forEach를 사용하면 for in 과 동일한 연산을 수행할 수 있습니다.
(1...9).forEach {
print($0)
}
(1...9).forEach { index in
print(index)
}
for in 과 forEach는 반복자 사용방식에 차이가 있습니다. forEach의 경우 위와 같이 반복자 변수를 선언, 사용하는 방식의 차이가 있으니 차이점을 알아두시면 좋습니다.
위 코드의 첫번째 케이스와 같이 반복자 변수(index)를 선언하지 않고, 순회하는 반복자의 값을 $0로 접근할 수도 있습니다. 이 경우에는 별도의 [index(반복자 변수명) in] 표현을 하실 필요가 없습니다.
이렇게 이번 포스팅에서는 for in / forEach로 구구단을 출력해볼 수 있었는데요. 저는 위 코드 들에서 하나 아쉬운게 있습니다. 바로 print()문을 수차레 출력하는 부분인데요. 성능상 print() 출력 함수는 가능한 적게 출력하는 것이 좋습니다. 그 해결책으로는 문자열을 누적해서 print() 호출 한번만으로 출력하는 방법이 있습니다.
print()문의 호출을 최소화 하여 구구단 출력하기
swift 고차함수 map, joined의 활용
위와 같이 단 한번의 print()문 호출로 구구단 결과값을 출력할 수 있습니다. 코드 실행 단계는 아래와 같습니다.
1) (1...9) 의 값을 하나하나 순회하면서 출력해야할 문자열을 map 연산자 블럭 내에서 매핑을 해준 뒤(map, [Int] -> [String] 타입으로 매핑),
2) 배열의 각 문자열 값 들을 개행 단위로 합쳐서(joined(separator:), [String] -> String 타입으로 합쳐짐)
-> 변환한 String타입의 문자열 결과를 print() 호출 한번만으로 출력할 수 있습니다.
이번 문제는 출력의 양이 매우 적어서 성능상 큰 차이를 느낄 수 없지만, 만약 입력범위, 출력양이 매우 많아진다면, 큰 성능 상 차이를 보실 수 있습니다.
지금까지 작성한 코드의 제출 결과는 위와 같습니다. 앞서 말했듯이 해당 구구단 출력 문제는 입력, 출력 조건이 까다롭지 않아서 성능상 큰 차이는 결과로 확인 할 수 없습니다.
위에서 아래로 순서대로 3 - 2 - 1 번째 문제풀이 제출결과입니다.
백준 제출 시 swift언어의 최소 시간은 8ms입니다. 코드 제출 시 그 이하의 시간값은 나오지 않습니다.
오늘은 swift의 for in / forEach를 통해서 간단하게 구구단 출력문제를 해결해 보았습니다. 더 나아가 print()문을 최대한 적게 호출하면서 모든 답을 출력할 수 있는 팁도 공유해드렸습니다.
이번 포스팅은 입문자 분들은 기준으로 작성한 포스팅인데 아마 이해 안가는 코드 내용이 있을 수 있다고 생각합니다. 특히 forEach, map, joined 등의 고차함수가 익숙하지 않을 수 있는데요. 이 함수들은 swift언어로 알고리즘을 꾸준히 푸실 거라면 꼭 찾아보고 익혀두시길 추천드립니다.
다음에도 문제풀이 포스팅을 작성해보도록 하겠습니다. 질문이나 의견 환영합니다. 모두 화이팅~ 😊
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
백준 재귀함수 기초문제, 10872 팩토리얼 swift 문제풀이 (0) | 2021.01.25 |
---|---|
swift 기초반복문 while문 활용, 백준 더하기사이클 문제풀이 (0) | 2021.01.20 |
swift if 조건문/삼항연산자 활용, 두 수 비교하기 문제풀이 (0) | 2021.01.17 |
swift 입문, 백준 We love kriii print 출력 문제풀이 (2) | 2021.01.14 |
swift print 출력 메서드, 백준 Hello World 문제풀이 (0) | 2021.01.13 |
- Total
- Today
- Yesterday
- 알고리즘문제
- swift알고리즘
- CoreML
- Protocol
- 백준알고리즘
- 자연어처리
- swift reduce
- swift언어
- 컬렉션
- swift 기초
- 백준swift
- 프로그래머스
- swift문제
- swift 문자열
- createML
- uikit
- 프로그래머스swift
- Collection
- 김프매매
- Swift 알고리즘
- 알고리즘
- 부스트코스
- 프로토콜
- swift string
- ios
- swift
- 개발자문서
- 스위프트
- SwiftUI
- publisher
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |