3냥 집사이면서 게임 개발자입니다.
구현과 문제를 푸는 방법의 기초 본문
구현은 사실 아주 쉬운 알고리즘입니다. 말 그대로 문제 그대로 구현을 하면 됩니다. 예를 들어서 배열을 회전하라, 스택에 넣어라 하면 말 그대로 rotate 함수를 사용하고 stack.push 등을 하면 되는 것 입니다.
다음과 같이 문자열을 선언하고 아래의 문제를 풀어보겠습니다.
string faker = "tunatuna";
Q1. 앞에서부터 세 개의 문자열을 출력하라.
Q2. 해당 문자열을 거꾸로 해서 출력하라.
Q3. 해당 문자열 끝에 "mistake"이란 문자열을 추가하라.
라고 하면 다음과 같은 코드를 구축해야 합니다.
#include <bits/stdc++.h>
using namespace std;
string faker = "abcde";
int main()
{
// 3개 출력
cout << faker.substr(0,3) << '\n';
// 거꾸로 출력
reverse(faker.begin(), faker.end());
cout << faker << '\n';
// 문자열 추가
cout << faker + " mistake" << '\n';
return 0;
}
이와 같이 어려운 문제라도 주석을 달고 하나씩 차근차근 푸는 것이 좋습니다.
문제를 푸는 방법
코테를 준비하면서 가장 기초가 되는 부분은 문제 푸는 방법을 아는 것입니다.
어떻게 문제를 풀어야 할까요.
1. 문제를 본다.
2. 문제를 해석한다.
3. 코드를 작성한다.
단순하고 크게 세 가지의 과정을 통해서 문제를 풀게 됩니다.
여기서 중요한 점은 2번 문제를 해석한다. 입니다. 문제를 처음에 봤을 때 이러한 일련의 생각들이 일어나야 합니다.
* 먼저 코드 작성하지 말고 해석에 좀 더 시간을 써야 돼!!
2. 해석한다 과정에서
최대, 최소를 생각하고 배열을 쓸지 어떤 컨테이너를 쓸지 for문을 쓸지 논리적으로 우선 정리해본 뒤에 코드 작성 단계에 돌입하는 게 좋습니다.
입력
첫째 줄에 지도의 세로 크기 N과 가로크기 M이 주어진다. (3 <= N, M <= 8)
둘째 줄부터 N개의 줄에 지도의 모양이 주어진다. 0은 빈 칸, 1은 벽, 2는 바이러스가 있는 위치이다. 2의 개수는 2보다 크거나 같고, 10보다 작거나 같은 자연수이다. 빈 칸의 개수는 3개 이상이다.
1. 최대, 최소 범위를 파악합니다.
2. 단순 구현이라면 구현합니다.
3. 무식하게 풀 수 있다면 무식하게 풉니다.
4. 아니라면 다른 알고리즘을 생각합니다.
5. 제출하기전, 반례를 항상 생각합니다.
이런 순서로 들어가는 것이 고수분들이 권장하는 순서입니다.