-
[코드업 1098번] 설탕과자 뽑기Coding Test/기타 2020. 9. 18. 00:44
# 문제
부모님과 함께 유원지에 놀러간 영일이는 설탕과자(설탕을 녹여 물고기 등의 모양을 만든 것) 뽑기를 보게 되었다.
길이가 다른 몇 개의 막대를 바둑판과 같은 격자판에 놓는데,
막대에 있는 설탕과자 이름 아래에 있는 번호를 뽑으면 설탕과자를 가져가는 게임이었다.격자판의 세로(h), 가로(w), 막대의 개수(n), 각 막대의 길이(l),
막대를 놓는 방향(d:가로는 0, 세로는 1)과
막대를 놓는 막대의 가장 왼쪽 또는 위쪽의 위치(x, y)가 주어질 때,
격자판을 채운 막대의 모양을 출력하는 프로그램을 만들어보자.입력
첫 줄에 격자판의 세로(h), 가로(w) 가 공백을 두고 입력되고,
두 번째 줄에 놓을 수 있는 막대의 개수(n)
세 번째 줄부터 각 막대의 길이(l), 방향(d), 좌표(x, y)가 입력된다.
입력값의 정의역은 다음과 같다.
1 <= w, h <= 100
1 <= n <= 10
d = 0 or 1
1 <= x <= 100-h
1 <= y <= 100-w출력
모든 막대를 놓은 격자판의 상태를 출력한다.
막대에 의해 가려진 경우 1, 아닌 경우 0으로 출력한다.
단, 각 숫자는 공백으로 구분하여 출력한다.입력 예시
5 5 3 2 0 1 1 3 1 2 3 4 1 2 5
출력 예시
1 1 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1
My solution
# 입력들을 변수 및 2차원 배열에 받는다. h, w = map(int, input().split()) n = int(input()) info = [list(map(int, input().split())) for _ in range(n)] # 설탕과자가 놓일 격자판을 초기화한다. table = [[0] * w for _ in range(h)] # 2차원 리스트 info 에서 정보가 담긴 리스트를 하나씩 가져온다. for i in range(n): for j in range(info[i][0]): if info[i][1] == 0: # 막대기의 방향이 가로일 때 table[(info[i][2]-1)][(info[i][3]-1)+j] = 1 else: # 막대기의 방향이 세로일 때 table[(info[i][2]-1)+j][(info[i][3]-1)] = 1 # 막대들이 놓인 격자판을 출력한다. for i in range(h): for j in range(w): print(table[i][j], end=' ') print()
코드업 답안
a,b=input().split() h=int(a) w=int(b) m=[] for i in range(h+1) : m.append([]) for j in range(w+1) : m[i].append(0) n=int(input()) for i in range(n) : l,d,x,y=input().split() for j in range(int(l)) : if int(d)==0 : m[int(x)][int(y)+j]=1 else : m[int(x)+j][int(y)]=1 for i in range(1, h+1) : for j in range(1, w+1) : print(m[i][j], end=' ') print()
주목할 부분
코드업 답안은 l, d, x, y 변수에 입력을 받으며 바로 막대기 놓기를 수행했다. 반면, 나의 답안은 먼저 l, d, x, y에 대한 입력을 2차원 리스트로 전부 받고 그 리스트로부터 정보를 하나하나 꺼내서 막대기 놓기를 수행했다. 나의 방법이 조금 더 메모리를 잡아 먹는 비효율성이 있단 생각이 들어 다음 번엔 이 점을 고려해 코드를 짜야겠다.
'Coding Test > 기타' 카테고리의 다른 글
[코드업 1099번] 성실한 개미 (0) 2020.09.18 [코드업 1092번] 함께 문제 푸는 날 (0) 2020.09.17 [코드업 1024번] 단어 1개 입력받아 나누어 출력하기 (0) 2020.09.08