본문 바로가기

PS/백준

[BOJ] 백준 2563 색종이 (Swift)

반응형

문제

https://www.acmicpc.net/problem/2563

 

2563번: 색종이

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록

www.acmicpc.net

풀이

문제의 지문에서 가로, 세로의 크기가 100인 도화지라는 지문을 보고 2차원 배열을 떠올릴 수 있습니다.
이제 가로, 세로가 10인 색종이를 하나씩 붙이는데, x좌표와 y좌표를 입력으로 주어집니다.

범위를 나가는 경우는 없다고 하니, 고려하지 않고 색종이가 붙은 곳의 넓이를 어떻게 구할 수 있을까요?

곂쳐서 붙힌 경우를 어떻게 대처할 수 있을까요?

먼저, 100 * 100인 Bool타입의 2차원 배열을 만들고, 이것을 가로, 세로의 크기가 100인 도화지로 설정합니다.
x좌표와 y좌표를 입력받으면, 2차원 배열의 x부터 x + 10까지, y부터 y + 10까지를 true로 값을 설정해줍니다.
그렇다면 곂치는 부분도 이미 true로 설정되어 있기 때문에 2차원 배열에서 true인 값만 count를 해주면 색종이를 붙힌 넓이를 알아낼 수 있습니다.

고차함수 flatMap을 사용하여 1차원 배열로 바꾼 후, filter를 사용해 true인 값만 카운트 하는 방법을 사용했습니다.

소스코드

후기

2차원 배열에 대한 이해와, 곂치는 부분에 대한 생각을 해야할 것 같습니다.
문제의 그림을 보면 y축이 위로 올라가는데, 어차피 아래로 있는거랑 구하는 것은 동일하기 때문에 신경쓰지 않고 구현해도 되는 문제였습니다.

반응형