1from collections import deque
 2
 3dx = [0, 0, -1, 1]
 4dy = [-1, 1, 0, 0]
 5
 6N, M = map(int, input().split())
 7L = [list(map(int, input().split())) for _ in range(N)]
 8
 9def check():
10    q = deque()
11    q.append((0, 0))
12
13    visited = [[0]*M for _ in range(N)]
14    visited[0][0] = 1
15
16    while q:
17        curX, curY = q.popleft()
18
19        for i in range(4):
20            nX = curX + dx[i]
21            nY = curY + dy[i]
22
23            if 0 <= nX < N and 0 <= nY < M:
24                if L[nX][nY] == 0 and visited[nX][nY] == 0:
25                    q.append((nX, nY))
26                    visited[nX][nY] = 1
27                elif L[nX][nY] == 1:
28                    visited[nX][nY] += 1
29    melted = []
30    for i in range(N):
31        for j in range(M):
32            if visited[i][j] >= 2:
33                melted.append((i, j))
34
35    return melted
36
37result = 0
38
39while True:
40    isAnyCheese = False
41
42    melted = check()
43
44    if not melted:
45        break
46
47    for x, y in melted:
48        L[x][y] = 0
49
50    result += 1
51
52print (result)

๋ฌธ์ œ

  • N X M ํฌ๊ธฐ์˜ ํŒ ์œ„์— ์น˜์ฆˆ๊ฐ€ ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค
  • 2๋ณ€ ์ด์ƒ์˜ ์‹ค์™ธ์˜ ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•˜๋ฉด ํ•ด๋‹น ์น˜์ฆˆ๋Š” ๋…น๋Š”๋‹ค
  • ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์„ ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋ผ

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • ์™ธ๋ถ€๊ณต๊ธฐ๋ฅผ ๋”ฐ๋ผ BFS๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค
  • ๋‘ ๋ฒˆ์ด์ƒ visit๋œ ์น˜์ฆˆ๋Š” melted ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์—ˆ๋‹ค๊ฐ€ ํ•œ๋ฒˆ์— ๋…น์ธ๋‹ค
  • ๋…น์€ ์น˜์ฆˆ๊ฐ€ ์—†๋‹ค๋ฉด ๋ชจ๋“  ์น˜์ฆˆ๊ฐ€ ๋…น์€ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค

๊ณ ์ฐฐ

  • ์—ฌ๋Ÿฌ ์‹œ๋„ ์ดํ›„ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ด ๋‹ต์„ ์ฐพ์•„๋ณด์•˜๋‹ค.
๐Ÿง  Algorithm
 1def minion_game(string):
 2    stuart = 0
 3    kevin = 0
 4    
 5    for i in range(len(string)):
 6        for j in range(i+1, len(string)+1):
 7            if string[i] in ['A', 'E', 'I', 'O', 'U']:
 8                kevin += 1
 9            else:
10                stuart += 1
11    
12    if stuart > kevin:
13        print ('Stuart', stuart)
14    elif stuart < kevin:
15        print ('Kevin', kevin)
16    else:
17        print ('Draw')

๋ฌธ์ œ

  • Kevin๊ณผ Stuart๊ฐ€ The Minion ๊ฒŒ์ž„์„ ํ•œ๋‹ค
  • ๊ฒŒ์ž„์˜ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค
    • ๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด์งˆ๋•Œ, ์„œ๋กœ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ ๋‹ค
    • ์ด๋•Œ, Kevin์€ ๋ชจ์Œ์œผ๋กœ, Stuart๋Š” ์ž์Œ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋งŒ๋“ ๋‹ค
    • ํ•˜๋‚˜ ๋งŒ๋“ค๋•Œ๋งˆ๋‹ค ์ ์ˆ˜๋ฅผ +1 ์–ป๊ณ  ์ ์ˆ˜๊ฐ€ ๋†’์€ ์‚ฌ๋žŒ์ด ์ด๊ธด๋‹ค
  • “{๊ฒŒ์ž„์—์„œ ์ด๊ธด ์‚ฌ๋žŒ์ด๋ฆ„} {์ด๊ธด ์‚ฌ๋žŒ์˜ ์ ์ˆ˜}“๋ฅผ ์ถœ๋ ฅํ•˜๋ผ
  • ๋™์ ์ด๋ฉด “Draw"๋ฅผ ์ถœ๋ ฅํ•˜๋ผ
  • TC
    • input

      BANANA

๐Ÿง  Algorithm
1def merge_the_tools(string, k):
2  for i in range(0, len(string), k):
3    temp = []
4    for j in range(i, i+k):
5      if not string[j] in temp:
6        temp.append(string[j])
7    print (''.join(temp))

๋ฌธ์ œ

  • ๋ฌธ์ž์—ด S์™€ ์ •์ˆ˜ k๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, S๋ฅผ k ๊ธธ์ด์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์—์„œ ์ค‘๋ณต๋˜๋Š” ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•œ ๋’ค ์ถœ๋ ฅํ•œ๋‹ค
  • TC
    • input

      s = ‘AABCAAADA’, k = 3

๐Ÿง  Algorithm
 1from datetime import datetime
 2
 3def time_delta(t1, t2):
 4
 5    DATE_FORMAT = '%a %d %b %Y %H:%M:%S %z'
 6
 7    start = datetime.strptime(t1, DATE_FORMAT)
 8    end = datetime.strptime(t2, DATE_FORMAT)
 9
10    return str(int(abs(start-end).total_seconds()))

๋ฌธ์ œ

  • ์ •์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง€๊ณ , “Sun 10 May 2015 13:54:36 -0700"๊ณผ ๊ฐ™์€ ํ˜•์‹์˜ ๋‘ ์‹œ๊ฐ„์ด T๊ฐœ ์ฃผ์–ด์ง„๋‹ค
  • ๋‘ ์‹œ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ดˆ ๋‹จ์œ„๋กœ ์ถœ๋ ฅํ•œ๋‹ค
  • ์ด๋•Œ, ๋งˆ์ง€๋ง‰ +0530, -0700๊ณผ ๊ฐ™์€ ์ˆซ์ž๋Š” UTC์™€์˜ ์ฐจ์ด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค
  • TC
    • input

      2
      Sun 10 May 2015 13:54:36 -0700
      Sun 10 May 2015 13:54:36 -0000
      Sat 02 May 2015 19:54:36 +0530
      Fri 01 May 2015 13:54:36 -0000