2022. 1. 5. 20:20ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/1100
(자세한 예제는 사이트를 통해서 확인해보시길)
접근 방법 - 문자형을 이용한 수학적 사고 문제
백준의 1100번 문제는 수학적 사고력을 요구하는 문제이지만 이번엔 char형, 즉 문자형을 주로 다루는 문제였다.
문제에 나와있는 "체스판"이라는 것은 검은색 칸과 하얀색 칸이 번갈아서 배치된 판이다.
필자는 이러한 규칙적인 배치를 이용해, 문자열 배열을 통하여 문제를 해결하였다.
필자는 아래처럼 규칙을 설정하고 코드를 작성해보았다.
필자가 이용한 규칙
* 하얀색 칸을 판별하는 방법
문제에선 (0,0)이 하얀색이라고 정의하고 있으며, 체스판은 검은색 칸과 하얀색 칸이 번갈아서 배치되어있다.
따라서, 체스판이 chess [8][8] 배열로 정의되어있을 시, (0,0), (1,1), (0,2), (1,3)... 식으로 하얀색 칸이 배치되어있을 것이다.
여기서 우리는, 하얀색 칸의 가로/세로 배열 번호가 둘 다 짝수이거나 둘 다 홀수인 점을 알 수 있다.
=> 이렇게 하얀색 칸을 판별하고, 이 칸에 'F' 문자가 있는 개수를 구하여 문제를 해결하면 된다.
코드의 실행 순서
1) 8*8의 문자형 배열을 선언하고, 정답을 저장하는 변수(sum) 하나를 0으로 초기화하면서 선언하기
2) 8*8 문자를 한 글자씩 입력받기
3) 위 규칙대로, 가로/세로 배열 번호가 모두 짝수이거나 홀수인 경우 입력받은 문자가 'F'일 때 sum에 1 추가하기
4) 입력이 모두 끝나면 sum을 출력한 뒤, 실행 종료한다.
후기
아주 간단한 문제였지만 하나 아쉬운 점이자 이 글을 쓰면서 알게 된 점이라면,
굳이 문자형 배열을 선언해서 해결할 문제는 아니었다는 점이다.
이제 보니, 반복문의 제어 변수인 i, j를 통해서도 충분히 칸의 색깔을 판별할 수 있었다.
아무리 쉬운 문제였지만 되도록 코드의 크기를 줄이는 방식으로 작성해야 했는데, 이건 필자의 실책.
다음부턴 이 점을 주의하면서 코딩하자.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
using namespace std;
//백준 1100번 코드
char chess[8][8];
int main() {
int sum = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
cin >> chess[i][j];
if (((i % 2 == 0 && j % 2 == 0) || (i % 2 != 0 && j % 2 != 0))&&chess[i][j]=='F') {
sum++;
}
}
}
cout << sum;
}
제출 결과
(2022.01.01 백준 1100번 제출 결과)
(이제 보니 2022년도 첫 ps였군)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 1157번 단어 공부 (C언어) (0) | 2022.01.07 |
---|---|
[백준 BOJ] 1152번 단어의 개수 (C언어) (0) | 2022.01.06 |
[백준 BOJ] 1085번 직사각형에서 탈출 (C++/cpp) (0) | 2022.01.05 |
[백준 BOJ] 1075번 나누기 (C언어) (0) | 2022.01.05 |
[백준 BOJ] 1012번 유기농 배추 (Java) (0) | 2022.01.05 |