티스토리 뷰

728x90
반응형

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

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

댕어렵..

C++ 배열 다시 공부하는 계기가 되었음..

우선 문제의 입력을 살펴보면 M X N크기를 입력 받는다. 나는 이를 동적 배열로 할당받아 해결하려 하였다. 하지만, C++을 오랜만에 접한 나는 C++로 동적 배열 만드는 방법을 잊어 버렸다 ㅎㅎ

다음 포스팅을 보고 오면 배열에 대해서는 알 수 있을 것이다.

 

https://jhcard.tistory.com/22

 

[C++] 배열

기본적인 배열에 대한 설명은 생략한다. C++에서의 배열의 활용, 초기화, 동적 배열에 대해 알아보려고 한다. 1. 배열 선언 및 초기화 먼저 알고 나면 좋은 것을 알려주겠다. int arr[5] = {1,2,3,4,5}; int

jhcard.tistory.com

우선 나는 고칠 필요가 없는 부분들을 저장해주는 배열을 동적으로 만들어 주었다.

예를 들면

만약 이렇게 M X N이 주어졌고, B와 W가 다음과 같이 배정되어 있다면 나는 빨간 사각형 만큼 크기의 배열을 동적으로 할당해 준다. - 빨간 사각형의 크기는 10 - 8 + 1이다. 10이 동적으로 변하는 값이다. 8은 8*8에서의 8이다.

 

저 빨간 사각형은 int형으로 할당 되는데, 먼저 가로가 y, 세로가 x로 되어 있는데, y+x가 홀수인 경우 B, 짝수인 경우 W인지 확인한다. 만약 맞다고 하면 해당하는 빨간색 배열에 +1 해준다. 대충 이해가 되는가? 문제는 번갈아가면서 B와 W가 나와야 한다고 나와있다. 그렇기 때문에 번갈아가면서 +1 해주는데, 여기에서 짝수일때가 B, 홀수일때가 W일 수도 있는데, 이것도 위의 내용을 확인하면서 동시에 확인할 수 있다. 

 

나는 이러한 방식으로 코딩을 하였다. 하지만 여기에 문제가 있었다.

나는 이중반복문으로 모든 체스판을 확인하러간다. 확인을 하면서 +해줘야 할 값은 빨간색 사각형 만큼의 크기이다.

대충 이해 되는가? 그림이 조금 어지럽지만, 빨간색 한칸의 배열에는 큰 빨간색에서의 고쳐야 할 숫자가 들어가고, 파란색 한칸의 배열에는 큰 파란색에서의 고쳐야할 숫자가 들어가있다. 마지막에는 모든 배열 중에서 가장 작은 숫자를 출력해 주는 방식이다.

나는 방식을 다 알려주었다. 나는 이 과정에서 조금 애먹었다.. 아직 머리가 잘 풀리지 않은것 같다.

다음 문제 도전하러 간다.

728x90
반응형

'코딩테스트 > Silver 5' 카테고리의 다른 글

[S5] 1094. 막대기  (0) 2022.05.20
[S5] 1064. 평행사변형  (0) 2022.05.20
[S5] 1059. 좋은 구간  (0) 2022.05.19
[S5] 1037. 약수  (0) 2022.05.19
[S5] 1010. 다리 놓기  (0) 2022.05.17