[λ°±μ€€] 였λͺ©(C++)

2023. 4. 24. 15:27Β·πŸ–₯️ Study Note/Coding Test

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
'πŸ–₯️ Study Note/Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / λ‹€μŒ 큰 숫자(C++)
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / ν”Όλ³΄λ‚˜μΉ˜ 수(C++)
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.1 / μžμ—°μˆ˜ λ’€μ§‘μ–΄ λ°°μ—΄λ‘œ λ§Œλ“€κΈ°(C++)
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.3 / 섬 μ—°κ²°ν•˜κΈ°(C++)
Beankong_
Beankong_
μ£Όλ‹ˆμ–΄ ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž˜λ¨Έ 곡뢀 기둝
  • Beankong_
    Beankong's Devlog
    Beankong_
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (146)
      • β›… Daily (0)
      • πŸ–₯️ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • 🧭 Devlog (8)
        • μ˜€λ‹΅λ…ΈνŠΈ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • λΈ”λ‘œκ·Έ 메뉴

    • 링크

    • 곡지사항

    • 인기 κΈ€

    • νƒœκ·Έ

      ν—¬ν…Œμ΄μ»€
      unrealengine build system
      UnrealEngine5
      ν”„λ£Œκ·Έλž˜λ¨ΈμŠ€
      OnlineSubsystem
      κ²Œμž„ 개발
      κ²Œμž„ ν”„λ‘œκ·Έλž˜λ°
      κ²Œμž„ν”„λ‘œκ·Έλž˜λ°
      μ•Œκ³ λ¦¬μ¦˜
      μ½”λ”©ν…ŒμŠ€νŠΈ
      cpp
      unrealengine module
      μ΅œλ‹¨ 거리 μ•Œκ³ λ¦¬μ¦˜
      ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
      programmers
      κ²Œμž„ λͺ¨μž‘
      propertyaccess
      그리디(greedy)
      κ·Έλž˜ν”„ 순회
      UnrealEngine
    • 졜근 λŒ“κΈ€

    • 졜근 κΈ€

    • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
    Beankong_
    [λ°±μ€€] 였λͺ©(C++)
    μƒλ‹¨μœΌλ‘œ

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”