티스토리 뷰
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++로 동적 배열 만드는 방법을 잊어 버렸다 ㅎㅎ
다음 포스팅을 보고 오면 배열에 대해서는 알 수 있을 것이다.
[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일 수도 있는데, 이것도 위의 내용을 확인하면서 동시에 확인할 수 있다.
나는 이러한 방식으로 코딩을 하였다. 하지만 여기에 문제가 있었다.
나는 이중반복문으로 모든 체스판을 확인하러간다. 확인을 하면서 +해줘야 할 값은 빨간색 사각형 만큼의 크기이다.
대충 이해 되는가? 그림이 조금 어지럽지만, 빨간색 한칸의 배열에는 큰 빨간색에서의 고쳐야 할 숫자가 들어가고, 파란색 한칸의 배열에는 큰 파란색에서의 고쳐야할 숫자가 들어가있다. 마지막에는 모든 배열 중에서 가장 작은 숫자를 출력해 주는 방식이다.
나는 방식을 다 알려주었다. 나는 이 과정에서 조금 애먹었다.. 아직 머리가 잘 풀리지 않은것 같다.
다음 문제 도전하러 간다.
'코딩테스트 > 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 |
- Total
- Today
- Yesterday
- portal1
- 플로이드-워셜
- tsp알고리즘
- cin.tie(nullptr);
- Set
- ios::sync_with_stdio(false)
- 확장 유클리드
- manber myers
- 트리보나치
- readInt
- 분할정복
- bits/stdc++.h
- fread
- fastIo
- writeString
- 피보나치
- unistd.h
- list
- 에라토스테네스의 체
- writeInt
- 좌표 압축 알고리즘
- readString
- 큰 수 계산
- SCC 알고리즘
- 해시맵
- Witcher3
- deque와 vector의 차이
- 행렬 멱법
- scanf
- 비트마스킹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |