IT/코딩테스트

[IT/코딩테스트] 99클럽 코테 스터디14일차 TIL + BOJ2615

토끼개발자 조르디 2025. 2. 6. 20:57

 

오늘의 문제

https://www.acmicpc.net/problem/2615

 

 

오늘도 문제를 오랜 시간 고민하기 보다는 다른 분들의 풀이를 보고 이해했다.

다음주까지는 코테에 신경을 쓸 수가 없다 🥹

 


오늘 공부한 내용

- 대각선 이동에 대한 dx, dy 설정

- 방향을 (→ ↓ ↘ ↗)로 설정 : 승부가 결정되었을 경우에는 연속된 다섯 개의 바둑알 중 가장 왼쪽에 있는 바둑알의 좌표를 출력

- 오목의 위치를 for 문으로 확인하면서 다 체크

- 육목일 경우도 체크하여 걸러주어야 한다는 것

- sys.exit(0) : 한번에 프로그램 종료

 

아래의 페이지를 통해 공부했다.

 

https://velog.io/@hygge/Python-%EB%B0%B1%EC%A4%80-2615-%EC%98%A4%EB%AA%A9-Brute-Force

 

[Python] 백준 2615 오목 (Brute Force)

(0, 0)부터 (18, 18)까지 모든 좌표에서 방향 갯수만큼 for문을 4번 돌려 → ↓ ↘ ↗ 방향으로 쭉쭉 5칸씩을 체크! (바둑돌이 놓여있는 경우에만=즉 좌표에 저장된 값이 0이 아닌 경우에만) x, y는 현재

velog.io

 

 

해결 코드

import sys
input = sys.stdin.readline

board = []
for i in range(19):
    board.append(list(map(int, input().split())))

# → ↓ ↘ ↗
dx = [0, 1, 1, -1]
dy = [1, 0, 1, 1]

for x in range(19):
    for y in range(19):
        if board[x][y] != 0:
            focus = board[x][y]

            for i in range(4):
                cnt = 1
                nx = x + dx[i]
                ny = y + dy[i]

                while 0 <= nx < 19 and 0 <= ny < 19 and board[nx][ny] == focus:
                    cnt += 1

                    if cnt == 5:
                        # 육목 체크
                        if 0 <= x - dx[i] < 19 and 0 <= y - dy[i] < 19 and board[x - dx[i]][y - dy[i]] == focus:
                            break
                        if 0 <= nx + dx[i] < 19 and 0 <= ny + dy[i] < 19 and board[nx + dx[i]][ny + dy[i]] == focus:
                            break
                        # 육목이 아니면 성공한거니까 종료
                        print(focus)
                        print(x + 1, y + 1)
                        sys.exit(0)

                    nx += dx[i]
                    ny += dy[i]

print(0)

 

 

나중에 꼭 다시 풀어봐야겠다 🥲

지금 다른 것들을 하느라 잠시 노력을 덜 들인 문제들은 다 체크해두고 있다..

시간 좀 지나서 다시 복습해보자....!!  다음 기수 스터디도 신청....? ㅎㅎ