https://www.acmicpc.net/problem/2615
λ¬Έμ
μ€λͺ©μ λ°λνμ κ²μ λ°λμκ³Ό ν° λ°λμμ κ΅λλ‘ λμμ 겨루λ κ²μμ΄λ€. λ°λνμλ 19κ°μ κ°λ‘μ€κ³Ό 19κ°μ μΈλ‘μ€μ΄ κ·Έλ €μ Έ μλλ° κ°λ‘μ€μ μμμλΆν° μλλ‘ 1λ², 2λ², ... ,19λ²μ λ²νΈκ° λΆκ³ μΈλ‘μ€μ μΌμͺ½μμλΆν° μ€λ₯Έμͺ½μΌλ‘ 1λ², 2λ², ... 19λ²μ λ²νΈκ° λΆλλ€.
μμ κ·Έλ¦Όμμμ κ°μ΄ κ°μ μμ λ°λμμ΄ μ°μμ μΌλ‘ λ€μ― μμ λμ΄λ©΄ κ·Έ μμ΄ μ΄κΈ°κ² λλ€. μ¬κΈ°μ μ°μμ μ΄λ κ°λ‘, μΈλ‘ λλ λκ°μ λ°©ν₯ λͺ¨λλ₯Ό λ»νλ€. μ¦, μμ κ·Έλ¦Όμ κ²μμμ΄ μ΄κΈ΄ κ²½μ°μ΄λ€. νμ§λ§ μ¬μ― μ μ΄μμ΄ μ°μμ μΌλ‘ λμΈ κ²½μ°μλ μ΄κΈ΄ κ²μ΄ μλλ€.
μ λ ₯μΌλ‘ λ°λνμ μ΄λ€ μνκ° μ£Όμ΄μ‘μ λ, κ²μμμ΄ μ΄κ²Όλμ§, ν°μμ΄ μ΄κ²Όλμ§ λλ μμ§ μΉλΆκ° κ²°μ λμ§ μμλμ§λ₯Ό νλ¨νλ νλ‘κ·Έλ¨μ μμ±νμμ€. λ¨, κ²μμκ³Ό ν°μμ΄ λμμ μ΄κΈ°κ±°λ κ²μμ λλ ν°μμ΄ λ κ΅°λ° μ΄μμμ λμμ μ΄κΈ°λ κ²½μ°λ μ λ ₯μΌλ‘ λ€μ΄μ€μ§ μλλ€.
μ λ ₯
19μ€μ κ° μ€λ§λ€ 19κ°μ μ«μλ‘ ννλλλ°, κ²μ λ°λμμ 1, ν° λ°λμμ 2, μμ΄ λμ΄μ§ μλ μ리λ 0μΌλ‘ νμλλ©°, μ«μλ ν μΉΈμ© λμ΄μ νμλλ€.
μΆλ ₯
첫μ€μ κ²μμμ΄ μ΄κ²Όμ κ²½μ°μλ 1μ, ν°μμ΄ μ΄κ²Όμ κ²½μ°μλ 2λ₯Ό, μμ§ μΉλΆκ° κ²°μ λμ§ μμμ κ²½μ°μλ 0μ μΆλ ₯νλ€. κ²μμ λλ ν°μμ΄ μ΄κ²Όμ κ²½μ°μλ λμ§Έ μ€μ μ°μλ λ€μ― κ°μ λ°λμ μ€μμ κ°μ₯ μΌμͺ½μ μλ λ°λμ(μ°μλ λ€μ― κ°μ λ°λμμ΄ μΈλ‘λ‘ λμΈ κ²½μ°, κ·Έ μ€ κ°μ₯ μμ μλ κ²)μ κ°λ‘μ€ λ²νΈμ, μΈλ‘μ€ λ²νΈλ₯Ό μμλλ‘ μΆλ ₯νλ€.
λ΄ ν΄λ΅
#include<stdio.h>
#include<iostream>
#include <vector>
using namespace std;
int board[19][19];
int dx[4] = { -1, 1, 1, 0 };
int dy[4] = { 1, 0, 1, 1 };
bool on_board(const int& row, const int& col)
{
return (row >= 0 && col >= 0 && row < 19 && col < 19);
}
bool chk(const int& color, const int& dir, int row, int col)
{
// νμ¬ μμΉμμ λ°©ν₯μΌλ‘ 5λ² λ λμκ°
for (int i = 0; i < 5; ++i)
{
// λ²μ λ°μ΄κ±°λ μκΉμ΄ λ€λ₯΄λ€λ©΄ false
if (!on_board(row, col))
return false;
if (board[row][col] != color)
return false;
row += dx[dir];
col += dy[dir];
}
// 5λ² λ λμκ° λ€ λμμ΄ νμ¬ λ μκ³Ό κ°μΌλ©΄ 6λμ΄λ―λ‘ false
return !(board[row][col] == color);
}
int find_winner(int& start_row, int& start_col)
{
for (int row = 0; row < 19; ++row)
{
for (int col = 0; col < 19; ++col)
{
if (0 == board[row][col])
continue;
// 4λ°©ν₯ (μ’, ν, μ°μ’μ, μ°μ’ν)
for (int d = 0; d < 4; ++d)
{
// μ΄μ λμ΄ κ°μ μμ΄λ©΄ νμΈx
int px = row - dx[d];
int py = col - dy[d];
if (on_board(px, py))
{
if (board[row][col] == board[px][py])
continue;
}
// μ€λͺ© μμ± μ²΄ν¬
if (chk(board[row][col], d, row, col))
{
start_col = col + 1;
start_row = row + 1;
return board[row][col];
}
}
}
}
return 0;
}
int main()
{
int winner = 0;
int start_col = 0;
int start_row = 0;
//input μ²λ¦¬
for (int i = 0; i < 19; ++i)
{
for (int j = 0; j < 19; ++j)
{
cin >> board[i][j];
}
}
// μ΄κΈ΄ λ μ°ΎκΈ°
winner = find_winner(start_row, start_col);
// κ²°κ³Ό μΆλ ₯
std::cout << winner << endl;
// κ°λ‘ μΈλ‘ μΆλ ₯
if (0 != winner)
std::cout << start_row << ' ' << start_col << endl;
}
'π₯οΈ Study Note > Coding Test' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νλ‘κ·Έλλ¨Έμ€ / level.2 / λ€μ ν° μ«μ(C++) (0) | 2023.05.01 |
---|---|
νλ‘κ·Έλλ¨Έμ€ / level.2 / νΌλ³΄λμΉ μ(C++) (0) | 2023.04.25 |
νλ‘κ·Έλλ¨Έμ€ / level.1 / μμ°μ λ€μ§μ΄ λ°°μ΄λ‘ λ§λ€κΈ°(C++) (1) | 2023.04.23 |
νλ‘κ·Έλλ¨Έμ€ / level.3 / μ¬ μ°κ²°νκΈ°(C++) (0) | 2023.04.21 |
νλ‘κ·Έλλ¨Έμ€ / level.2 / ꡬλͺ 보νΈ(C++) (0) | 2023.04.20 |