https://www.acmicpc.net/problem/2444
별 찍기 문제로 출력되는 모양에 따라서 난이도가 천차만별인 문제라고 생한다.
이런 문제의 가장 중요한 점은 출력에 대한 패턴을 찾는 것이다!
각 줄마다의 공백 개수와 별의 개수를 확인해보자!
Line 1 : 공백 4, 별 1
Line 2 : 공백 3, 별 3
Line 3 : 공백 2, 별 5
Line 4 : 공백 1, 별 7
Line 5 : 공백 0, 별 9
먼저 상단 삼각형 부분인 5줄을 살펴보면 공백은 1개씩 줄어들고 별은 2개씩 늘어나는 패턴을 찾을 수 있었고 하단 삼각형은 위에서 찾은 패턴을 거꾸로 생각하면 된다
패턴을 찾았으니 코드를 짜보자!
let n = Int(readLine()!)!
for i in 1...n {
let text = String(repeating: " ", count: n - i) + String(repeating: "*", count: 2 * i - 1)
print(text)
}
입력을 받고 반복 횟수에 따라 공백과 별의 개수가 바뀌기 때문에 while 문 보다 for 문을 사용해서 해결했고
여기서 하나의 팁은 특정 문자를 지정한 개수만큼 출력을 해야하기 때문에 String(repeating: , count: )
을 선택했다!
공백은 1씩 줄어들기 때문에 n-i
만큼, 별은 2씩 증가하기 때문에 2 * i - 1
로 설정을 했다
하단 삼각형에 대해선 같은 방식으로 찾은 패턴 개수를 공식화하면 되기 때문에 생략하고 아래 소스 코드를 확인해주세요!
let n = Int(readLine()!)!
for i in 1...n {
let text = String(repeating: " ", count: n - i) + String(repeating: "*", count: 2 * i - 1)
print(text)
}
for i in 1..<n {
let text = String(repeating: " ", count: i) + String(repeating: "*", count: 2 * (n - i) - 1)
print(text)
}