220v
젝무의 개발새발
220v
전체 방문자
오늘
어제
  • 분류 전체보기 (255)
    • AI (35)
      • ML, DL 학습 (30)
      • 논문 리뷰 (4)
      • 실습 및 프로젝트 (1)
    • Algorithm (145)
      • LeetCode (13)
      • 프로그래머스 (35)
      • 백준 (96)
      • 알고리즘, 문법 정리 (1)
    • Mobile, Application (17)
      • Flutter (10)
      • iOS, MacOS (7)
    • BackEnd (7)
      • Flask (1)
      • Node.js (5)
      • Spring, JSP..etc (1)
    • Web - FrontEnd (18)
      • JavaScript, JQuery, HTML, C.. (12)
      • React (6)
    • DataBase (1)
      • MySQL (1)
      • Firebase Firestore (0)
      • Supabase (0)
    • Git (1)
    • 기타 툴 및 오류 해결 (3)
    • 강의 (5)
      • Database (3)
      • 암호학 (2)
      • 알고리즘 (0)
    • 후기와 회고 (2)
    • 블로그 꾸미기 (1)
    • 일상과 이것저것 (20)
      • 맛집 (12)
      • 세상사는일 (4)
      • 도서리뷰 (1)
      • 이런저런 생각들 (잡글) (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 오블완
  • 구현
  • Greedy
  • Dynamic Programming
  • disjoint set
  • two pointer
  • simulation
  • implementation
  • dfs
  • 티스토리챌린지
  • 위상 정렬
  • 백준
  • Lis
  • 다익스트라
  • BFS
  • Prefix Sum
  • union-find
  • brute-Force
  • Backtracking
  • dp
  • Priority Queue
  • REACT
  • topological sort
  • binary search
  • Minimum Spanning Tree
  • IMPLEMENT
  • Mathematics
  • 프로그래머스
  • top-down
  • bitmasking

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
220v

젝무의 개발새발

Algorithm/백준

[백준] 2615. 오목 - Python

2023. 10. 9. 21:42

[Silver I]

 

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

 

2615번: 오목

오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호

www.acmicpc.net

 

풀이

19x19의 모든 칸을 순회하며, 오목이 되는 지 여부를 Brute-Force로 검사하면 된다.

오목이 될 수 있는 모든 경우는 하향 직선 5개, 우하향 대각성 5개, 우향 직선 5개, 우상향 대각선 5개가 이어지는 4가지의 경우가 존재하며,

시작하는 돌의 바로 이전 칸과, 5개째가 아닌 6개째의 칸까지 같이 확인하여 6목이 되지 않는 지를 검사해야 한다.

 

AC.

b = []

for _ in range(19):
    b.append(list(map(int, input().split())))
  
# 아래로 5개, 우하향 대각선 5개, 오른쪽으로 5개, 우상향 대각선 5개 (그러나, 6목 방지를 위해 시작에서 한칸 전부터, 5목이 되기 한칸 뒤까지 포함)
dr = [[-1, 1, 2, 3, 4, 5], [-1, 1, 2, 3, 4, 5], [0, 0, 0, 0, 0, 0], [1, -1, -2, -3, -4, -5]]
dc = [[0, 0, 0, 0, 0, 0], [-1, 1, 2, 3, 4, 5], [-1, 1, 2, 3, 4, 5], [-1, 1, 2, 3, 4, 5]]

# 체크
for r in range(19):
    for c in range(19):
        if b[r][c] == 0:
            continue

        for j in range(4):
            cnt = 0
            for i in range(6):
                lr = r + dr[j][i]
                lc = c + dc[j][i]
                
                # 6목 이상 제외
                if i == 0 or i == 5:
                    if lr < 0 or lr >= 19 or lc < 0 or lc >= 19 or b[lr][lc] != b[r][c]:
                        cnt += 1
                else:
                    if lr < 0 or lr >= 19 or lc < 0 or lc >= 19:
                        continue
                    if b[lr][lc] == b[r][c]:
                        cnt += 1
            
            if cnt == 6:
                print(b[r][c])
                print(r+1, c+1)
                exit()

# 승부 결정 x
print(0)

 

    'Algorithm/백준' 카테고리의 다른 글
    • [백준] 12015. 가장 긴 증가하는 부분 수열 2 - Python
    • [백준] 2352. 반도체 설계 - Python
    • [백준] 2565. 전깃줄 - Python
    • [백준] 17144. 미세먼지 안녕! - Python
    220v
    220v
    DGU CSE 20 / Apple Developer Academy @ POSTECH 2nd Jr.Learner.

    티스토리툴바