이거 문제는 쉬운데 .. 다시 한번 고차함수를 잘 써야겠다고 느낀 .. 그런 문제라서 정리함 (.. 우우 언제쯤 난 .. 어쩔. 하면 되잖아. ㅇㅋㅇㅋ.
문제
N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.
입력
첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 9보다 작거나 같다.
출력
출력형식과 같게 N*1부터 N*9까지 출력한다.
소깡이 풀이
import Foundation
let input = Int(readLine()!)!
for i in 1...9 {
print("\(input) * \(i) = \(input * i)")
}
그리고 좀 더 생각을 해봤음 ..
(1...9).forEach {
print("\(input) * \($0) = \(input * $0)")
}
오홀아 ..
그럼 여기서 드는 궁금증 .. for-in 과 forEach의 차이는 무엇인가. -> 반복자 사용방식의 차이 .. 라는데
새로 포슷힝 하겠음 .. (아마도)
_
근데 이제 새로운 풀이가 있나?
저것보다 더 줄일 수 있나?
고민을 하다가 ..
누군가가 이런 답을 작성함 (나랑 뇌 좀 바꾸자.)
그 사람 왈 :
"print() 메서드를 여러번 반복하는 것은 성능상 좋지 않음. 그래서 가능한 적게 출력하는 것이 좋음. 문자열을 누적해서 print() 호출 한번으로 줄여보겠음"
🫠
좋겠다 .. 그런 뇌가 있어서 ..
아무튼 그래서 줄여보면, print( 이 안에서 모든 로직 처리를 다하면 돼 ~ ) 이건데 .. 하나씩 해보자?!
print(
(1...9) // 1. 구구단의 범위를 지정하고
.map { "\(input) * \($0) = \(input * $0)" } // 2. 그 범위를 하나씩 순회하면서 출력할 문자열을 map을 통해 원하는 계산을 수행
.joined(separator: "\n") // [String] 형태를 개행 단위로 합쳐서 String으로 반환
)
그러면 print() 호출 한번만으로 출력할 수 있는 것을 알 수 있다.
.joined(separator:) 뭔데.
ㅇㅋㅇㅋ. 나도 어색함. ㅎ2
이 메서드는 separator 파라미터로 받은 "결합문자"로 배열의 문자열들을 하나로 연결한 문자열로 반환해주는 메서드이다.
print(
(1...9)
.map { "\(input) * \($0) = \(input * $0)" }
// .joined(separator: "\n")
)
위의 코드에서 결합을 하지 않고 출력하면,
이렇게 출력이 되는데 이 각 문자열을 "\n"으로 결합해서 문자열로 반환하여
이렇게 출력할 수 있다.
'Algorithm' 카테고리의 다른 글
백준 - 1110번 (더하기 사이클) (0) | 2022.08.23 |
---|---|
백준 - 10951번 (0) | 2022.08.23 |
Set을 잘 쓰자. (0) | 2022.08.20 |
백준 - 입출력과 사칙연산 (0) | 2022.08.17 |
프로그래머스 - 나머지가 1이 되는 수 찾기 (0) | 2022.04.15 |