홀수 정수 N이 주어지면 높이와 너비가 N인 X 모양 별 패턴을 출력하는 프로그램을 작성한다. 각 행에서는 두 대각선 위치에만 별을 출력하며, 마지막으로 출력된 별 뒤에는 공백을 출력하지 않는다.
입력 예시
첫째 줄에 홀수 정수 N이 주어진다. (3 <= N <= 10)
출력 예시
크기 N의 X 모양 별 패턴을 출력한다.
예제 테스트케이스
예제 1
입력 예시
출력 예시
3
* *
*
* *
예제 2
입력 예시
출력 예시
5
* *
* *
*
* *
* *
예제 3
입력 예시
출력 예시
7
* *
* *
* *
*
* *
* *
* *
정답 코드
N = int(input())
for i in range(N):
line = ""
for j in range(N):
if j == i or j == N - i - 1:
line += "*"
else:
line += " "
print(line.rstrip())
1. 코드 동작 설명
- 이 코드는 N x N 크기의 격자를 한 칸씩 확인하면서 X 모양 위치에만 *을 넣는다.
- 바깥쪽 반복문 for i in range(N)은 몇 번째 줄인지를 의미한다.
- 안쪽 반복문 for j in range(N)은 그 줄의 몇 번째 칸인지를 의미한다.
예를 들어 N = 5이면 좌표를 다음처럼 생각할 수 있다.
- i: 행 번호
- j: 열 번호
즉, (i, j) 위치를 하나씩 검사하는 방식이다.
1단계: 줄 단위 반복
for i in range(N):
- 첫째 줄부터 마지막 줄까지 반복한다.
- i는 현재 줄 번호이다.
예를 들어 N = 5이면
- i = 0 → 첫째 줄
- i = 1 → 둘째 줄
- i = 2 → 셋째 줄
- i = 3 → 넷째 줄
- i = 4 → 다섯째 줄
2단계: 한 줄을 저장할 문자열 준비
line = ""
- 현재 줄에 들어갈 문자들을 차례대로 붙이기 위한 빈 문자열이다.
3단계: 한 줄의 각 칸 검사
for j in range(N):
- 현재 줄의 왼쪽부터 오른쪽까지 한 칸씩 검사한다.
- j는 현재 칸의 열 번호이다.
예를 들어 N = 5, i = 0이면 첫째 줄에서 j는 0, 1, 2, 3, 4를 차례대로 가진다.
4단계: 별을 찍을 위치 판별
if j == i or j == N - i - 1:
이 부분이 핵심이다.
X 모양은 대각선 2개로 이루어진다.
- 왼쪽 위 → 오른쪽 아래 대각선: j == i
- 오른쪽 위 → 왼쪽 아래 대각선: j == N - i - 1
즉, 현재 칸 (i, j)가 이 두 대각선 중 하나에 속하면 *을 넣는다.
예시: N = 5
각 줄에서 별이 들어가는 열 번호를 보면 다음과 같다.
- i = 0일 때
- j == 0
- j == 5 - 0 - 1 = 4
- 즉, 0번 칸과 4번 칸에 별
- i = 1일 때
- j == 1
- j == 5 - 1 - 1 = 3
- 즉, 1번 칸과 3번 칸에 별
- i = 2일 때
- j == 2
- j == 5 - 2 - 1 = 2
- 즉, 가운데 칸 하나만 별
그래서 결과가 다음처럼 된다.
i=0 * *
i=1 * *
i=2 *
i=3 * *
i=4 * *
5단계: 별 또는 공백 추가
line += "*"
- 별 위치이면 *을 붙인다.
line += " "
- 별 위치가 아니면 공백을 붙인다.
즉, 줄 전체를 한 글자씩 완성한다.
6단계: 오른쪽 공백 제거 후 출력
print(line.rstrip())
- 줄 끝에 붙은 공백을 제거한 뒤 출력한다.
- 문제에서 “마지막 별 뒤에는 공백을 출력하지 않는다”라고 했기 때문에 필요하다.
예를 들어 첫 줄이 내부적으로
"* *"
이면 그대로 출력되지만,
어떤 줄이 내부적으로
" * "
처럼 끝에 공백이 있으면 rstrip()이 오른쪽 공백을 지워서
" *"
로 출력한다.
2. 문법 설명
input()
N = int(input())
- 한 줄을 문자열로 입력받는 함수
- 사용 형태:
input()
int()
N = int(input())
- 문자열을 정수로 변환하는 함수
- 사용 형태:
int(값)
for문
for i in range(N):
- 반복문을 실행할 때 사용한다.
- 여기서는 행과 열을 차례대로 검사한다.
- 사용 형태:
for 변수 in range(횟수):
실행할 코드
range()
range(N)
- 0부터 N-1까지의 정수를 만든다.
- 사용 형태:
range(끝)
if 조건문
if j == i or j == N - i - 1:
- 조건이 참이면 별을 넣고, 아니면 공백을 넣는다.
- 사용 형태:
if 조건:
실행할 코드
else:
실행할 코드
or
j == i or j == N - i - 1
- 두 조건 중 하나라도 참이면 전체를 참으로 만든다.
- 사용 형태:
조건1 or 조건2
문자열 덧붙이기
line += "*"
- 기존 문자열 뒤에 문자를 이어 붙인다.
- 사용 형태:
문자열변수 += 추가할문자열
rstrip()
print(line.rstrip())
- 문자열 오른쪽 끝의 공백을 제거한다.
- 사용 형태:
문자열.rstrip()
print()
print(line.rstrip())
- 값을 출력하는 함수
- 사용 형태:
print(값)
3. 실수 포인트
j == N - i - 1 대신 j == N - i로 쓰는 경우
if j == i or j == N - i:
- 인덱스는 0부터 시작하므로 오른쪽 대각선은 N - i - 1이어야 한다.
rstrip()을 빼는 경우
print(line)
- 줄 끝 공백이 그대로 출력되어 출력 형식이 틀릴 수 있다.
if j == i and j == N - i - 1로 쓰는 경우
if j == i and j == N - i - 1:
- 두 조건을 동시에 만족하는 경우는 가운데 한 칸뿐이므로 X 모양이 만들어지지 않는다.
line = ""를 바깥에서 한 번만 만드는 경우
line = ""
for i in range(N):
for j in range(N):
...
- 줄마다 초기화해야 하므로 line = ""는 바깥 반복문 안에 있어야 한다.
4. 핵심 정리
- i는 행, j는 열로 생각하면 이해가 쉽다.
- 현재 칸이 두 대각선 j == i 또는 j == N - i - 1에 있으면 별을 출력하면 된다.
'Univ > Python Programming' 카테고리의 다른 글
| [문제 07] 배열에서 최대값과 최소값 찾기 - Python 풀이 (0) | 2026.04.15 |
|---|---|
| [백준-2444] 별 찍기 - 7 코드 개선 - Python 풀이 (4) | 2026.04.10 |
| [문제 05] 별로 세모 그리기 - Python 풀이 (0) | 2026.04.09 |
| 파이썬의 변수와 기본 자료형 실습 (0) | 2026.04.08 |
| 파이썬의 변수와 기본 자료형 (0) | 2026.04.08 |