티스토리 뷰
백준 10996번 별 찍기 - 21
알고리즘 분류: 구현
링크: https://www.acmicpc.net/problem/10996
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 차례대로 별을 출력한다.
문제 파악
이 문제는 예제의 출력예시를 보고 별 찍기의 패턴을 알아내는 문제이다.
총 출력되는 줄의 수는 n의 2배인것으로 추정되고 별 찍기의 패턴을 보자면
0번인덱스 부터 시작한다고 할때 짝수 인덱스에는 별이 들어가고 홀수 인덱스에는 공백이 들어간다.
이전 글에서 말했듯이 이런 문제는 예제를 마우스로 드래그하여 공백이 있는지 확인하는 것이 중요하다.
이런식으로 한줄마다 n개의 문자열이 들어가는 것을 확인할 수 있다.
코드
총 출력되는 줄의 수가 2n개이기 때문에 range를 1이상 2n+1미만으로 설정했다.
각 줄마다 별모양과 공백을 합친 길이가 n이기 때문에 n개의 길이를 가진 각 인덱스가 별모양인 리스트를 만든다.
이 문제에서 예외로 입력값이 1이 주어졌을 때는 별모양 1개를 출력해야하기 때문에 이 경우는
따로 조건문을 설정하여 break문을 걸어준다.
i가 1이상 2n+1미만이기 때문에 i가 홀수일때는 별모양으로 시작해서
별 공백 별 공백 순으로 반복되고
i가 짝수일때는 공백 별 공백 별 순으로 반복된다는 것을 알 수 있다.
이를 통해 조건문 안쪽에서 for문을 한번더 반복하여 조건에 맞게 star의 인덱스를 변경해준다.
반복문이 다 끝나면 리스트에 담겨져 있던 별과 공백들을 문자열로 합쳐준다.
마지막으로 합쳐진 문자열을 출력해준다.
이 때 왜 처음부터 문자열을 사용하지않고 불편하게 리스트를 만들어서 문자열로 바꿔줄까라는
의문이 생길 수 있는데 이는 파이썬에서 문자열을 더하거나 곱해주는 등의 연산은 가능할지라도
불가변타입인 문자열의 인덱스를 이용해서 안의 내용을 바꿔버리는것은 불가능하기 때문에
불편하더라도 가변타입인 리스트를 이용하여 안의 내용을 바꿔준후에 다시 문자열로 변형해주는게 중요하다.
'Python 알고리즘' 카테고리의 다른 글
백준 4673번 파이썬 풀이: 셀프 넘버 (0) | 2020.09.01 |
---|---|
백준 3052번 파이썬 풀이: 나머지 (0) | 2020.09.01 |
백준 10871번 파이썬 풀이: X보다 작은 수 (0) | 2020.09.01 |
백준 1978번 파이썬 풀이: 소수 찾기 (0) | 2020.09.01 |
백준 2941번 파이썬 풀이: 크로아티아 알파벳 (2) | 2020.08.31 |