61~64번에서 별을 열심히 찍었었다. 이제 별 찍기 예제의 마지막 X 모양 별 찍기를 해보려고 한다.

2023.08.18 - [BOOK/파이썬 문제풀이 100] - 62. 대각선 별 찍기

 

62. 대각선 별 찍기

별 찍기의 응용은 참 많은 것 같다. 61번에서 기초적인 별 찍기를 했으니 살짝 응용한 대각선 별 찍기도 해보자. 2023.08.18 - [BOOK/파이썬 문제풀이 100] - 61. 삼각형 별 찍기 I 61. 삼각형 별 찍기 I 이

jijibae.tistory.com


문제

다음과 같이 *를 출력하는 코드를 for 반복문을 사용해 작성하세요.

 

접근

총 행의 수는 10이므로 바깥 for문의 반복 횟수는 10번이다.

열에서 처음부터 별까지의 빈칸의 수는 1행 => 0 , 2행 => 1, ... ,5행 => 4, 6행 =>4, 7행 => 3, ... , 10행 =>0이므로

+1씩 등차수열을 띄고, 7행부터 -1씩 등차수열을 띄니 조건문을 달아야 한다고 생각했다.

대칭이 많이 보이므로, 한쪽만 잘 구현해놓으면 반대쪽은 쉽게 할 수 있을 것이다.

j = 1
for i in range(10):
    if i == 5 : i = 4
    if i > 5: 
        i = i - (2*j+1)
        j += 1
    print(' ' * i, end="")
    print('*' * 1 , end="")
    print(' ' * (8-2*i), end="")
    print('*' * 1, end="")
    print(' ' * i,)

위 풀이는 이중 for문을 사용하지 않고.. 꾸역꾸역 어떻게든 해보겠다는 나의 의지가 잘 담겨 있다..

결과는 동일하게 나오지만 배울만한 내용은 없어 더 고민해보았다.

 

별이 언제 찍힐까?

62번의 대각선 별 찍기를 기억해보면 행과 열의 인덱스가 같은 경우 별이 찍힌다.

이 예제의 X 문자중 \ 부분은 행,열의 인덱스가 같은 부분이다.

 

그럼 / 부분은 어떻게 찍을 수 있을까??

바로 인덱스의 합이다. 행과 열의 인덱스의 합이 9일 때 별이 찍힌다고 생각할 수 있다.

X 문자에서 \부분
X 문자에서 / 부분

i + j 의 값이 9일 때 별이 찍힌다는 규칙을 알면 이 문제를 쉽게 풀 수 있다.

for i in range(10):
    for j in range(10):
        if i == j or i + j == 9:
            print('*', end="")
        else:
            print(' ', end="")
    print()

결과

인덱스의 합도 고려할 수 있는 좋은 문제였다고 생각한다.

63번에서 삼각형 별 찍기II를 맛 보고 왔었다. 이번 별 찍기 문제는 신기한 규칙이 있는 것 처럼 보인다.

2023.08.21 - [BOOK/파이썬 문제풀이 100] - 63. 삼각형 별 찍기 II

 

63. 삼각형 별 찍기 II

61번에서 삼각형 별 찍기 I를 했었다. 이번에는 61번의 결과를 거꾸로 출력해보겠다. 2023.08.18 - [BOOK/파이썬 문제풀이 100] - 61. 삼각형 별 찍기 I 61. 삼각형 별 찍기 I 이 예제는 백준, 프로그래머스

jijibae.tistory.com


문제

다음과 같이 *를 출력하는 코드를 for 반복문을 사용해 작성하세요.

 

접근

총 행의 수는 3이므로 for 문의 반복 횟수는 3이다.

열에 찍히는 *의 수는 1행 => 1, 2행 => 3, 3행 => 5 의 등차수열을 띄므로 변수라는 것을 알 수 있다.

별을 찍는 것만 고려하면 안되고 빈칸까지 고려해야한다.

for i in range(1,4):
    print('' * (3-i), end="")
    print('*' * (2*i-1), end="")
    print('' * (3-i))

결과

이중 for문을 사용할 수 있나? 생각해보았는데 한 줄에 출력해야할 것이 빈칸(' ')과 별(*)의 2종류이고,

별이 중간부터 나오므로 어렵게 이중 for문으로 푸는 것보다 한 번의 반복 동안 처리하는 것이 더 쉬워 보였다.

61번에서 삼각형 별 찍기 I를 했었다. 이번에는 61번의 결과를 거꾸로 출력해보겠다.

2023.08.18 - [BOOK/파이썬 문제풀이 100] - 61. 삼각형 별 찍기 I

 

61. 삼각형 별 찍기 I

이 예제는 백준, 프로그래머스 등등 코테 알고리즘 문제에 기본으로 나오는 단골 문제이므로, 기본을 손과 머리에 익히면 좋을 것 같아 정리합니다. 문제 다음과 같이 *을 출력하는 코드를 for 반

jijibae.tistory.com


문제

다음과 같이 *를 출력하는 코드를 이중 for 반복문을 사용해 작성하세요.

 

접근

총 5행의 출력이므로 바깥쪽 for문의 반복 횟수는 5번이다.

range 함수의 세번째 인자로 증감을 조절할 수 있다.

열의 출력이 1행 =>5, 2행=>4, 3행=>3 ... 의 -1의 등차수열을 띄므로 반복 횟수는 변수임을 알 수 있다.

 

for i in range(5):    # i값은 0부터 4까지 총 5번 반복
    for j in range(5,i,-1):    # j값은 5부터 i까지 총 5-i번 반복
        print('*', end="")
    print()

 

결과

i의 값을 -1씩 감소하게끔 작성할 수 있겠지만, 간단하게 반복수만 정해두고 시작해도 된다.

별 찍기의 응용은 참 많은 것 같다. 61번에서 기초적인 별 찍기를 했으니 살짝 응용한 대각선 별 찍기도 해보자.

2023.08.18 - [BOOK/파이썬 문제풀이 100] - 61. 삼각형 별 찍기 I

 

61. 삼각형 별 찍기 I

이 예제는 백준, 프로그래머스 등등 코테 알고리즘 문제에 기본으로 나오는 단골 문제이므로, 기본을 손과 머리에 익히면 좋을 것 같아 정리합니다. 문제 다음과 같이 *을 출력하는 코드를 for 반

jijibae.tistory.com


문제

다음과 같이 *를 출력하는 코드를 for 반복문을 사용해 작성하세요.

 

실행결과

 

접근

별이 찍히는 순간이 언제일까?

별은 행과 열의 인덱스가 같을 때 찍힌다.

인덱스가 같지 않을때는 빈칸을 출력해야한다.

출력이 5행이므로 바깥쪽 for 문의 반복횟수는 5이다.

for i in range(0,5):
    for j in range(0,5):
        if i == j:
            print('*', end='')
        else: 
            print(' ', end='')
    print()

결과

 

인덱스가 같지 않다면 빈칸을 출력하는 것도 고려해야한다.