시작은 미약하였으나 , 그 끝은 창대하리라

파이썬) 백준_20205번 본문

프로그래밍 연습문제/파이썬_연습문제

파이썬) 백준_20205번

애플파ol 2022. 1. 25. 19:24

● 문제

단색 비트맵 이미지는 이미지를 구성하는 각 픽셀은 0 또는 1의 색상 정보를 가지고 있다.

비트맵 이미지는 생성 당시 이미지의 크기, 해당 이미지를 구성하는 모든 픽셀의 정보가 이미 정해져 있기 때문에, 그림 1과 같이 이미지의 크기를 늘리더라도

기존의 픽셀이 늘린 방향으로 넓게 퍼질 뿐 해상도가 늘어나진 않는다.

< 그림 1. 크기를 늘린 비트맵 이미지의 예시 >

이렇게 기존에 있던 이미지에 픽셀을 추가하여 그림을 구성하는 총 픽셀 수를 늘리는 것을 업샘플링 (Up sampling) 이라고 한다.

업샘플링을 하는 방법은 여러 가지가 있는데 그중 가장 간단한 방법은 기존 픽셀의 배열을 그대로 유지한 채, 각 픽셀의 개수를 동일하게 늘리는 방법이다.

<그림 2. 그림을 가로, 세로로 K(=2) 배 늘렸을 때 추가된 픽셀의 모습 >

가로 세로의 길이가 N 인 단색 비트맵 이미지를 구성하는 모든 픽셀의 정보가 주어질 때, 해당 그림의 가로와 세로 크기를 그림 2와 같이 K 배 늘렸을 때, 업샘플링을 통해 늘어난 그림의 픽셀 정보들을 구해보자.

● 입력

첫 번째 줄에는 정사각형 단색 비트맵의 가로/세로 길이 N (1 ≤ N ≤ 10)과 이미지를 늘릴 배수 K (1 ≤ K ≤ 10) 가 주어진다.

두 번째 줄부터 (N+1)번째 줄에는 각 줄마다 N개의 픽셀 정보가 주어진다.

● 출력

N x K 줄에 걸쳐, 늘어난 단색 비트맵 이미지의 픽셀 정보를 출력한다.

 

 

 코드

import sys    # 프로그램 시간초과를 방지하기 위해서.

n, k = map(int, sys.stdin.readline().split())  # n,k로  받음 

list1 = []                         # 빈 리스트를 설정

for i in range(n):                # n의 사이즈에 따라서 반복 함 
    list1.append(list(map(int, sys.stdin.readline().split()))) # 2차원 리스트 입력받기 [[1,0],[0,1]]
# print(list1)

for i in range(n):             
    for _ in range(k):
        for j in range(n):
            for _ in range(k):            #동일한값을 출력을 시키기위해서 for루프 돌림, _역할 =k번 반복
                print(list1[i][j], end = ' ')    # end=' ' 줄바꿈 안하고 이어서 출력함
        print()          # 행을 바꿔주는 역할을 함

보완해야할 부분

    1. 2차원 리스트를 입력으로 받기 : 빈리스트(list_1=[]) 선언 후,

                                                  내부에 리스트 ( list()함수 ) 를 삽입(append()함수)해주면 됨

    2. 입력을 동시에 정수형으로 2개로 받기 : map함수 ,  split() 함수 사용

 

    3. for 문이 중복이 되있는 부분에 대해서 차근차근 생각을 해보면 됨.

 

    4. for문이 많이 사용될때는 시간초과를 방지하기 위해 input()함수보단

             import sys , sys.stdin.readline() 을 사용한다

 

 

 

출처) https://www.acmicpc.net/problem/20205

Comments