[백준 / Swift] 2444 - 별 찍기 - 7

박준혁 - Niro·2023년 9월 6일
0

백준

목록 보기
12/16
post-thumbnail

🔗 문제 링크


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)
}
profile
📱iOS Developer, 🍎 Apple Developer Academy @ POSTECH 1st, 💻 DO SOPT 33th iOS Part

0개의 댓글