{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm/BOJ-1987-Python/","result":{"data":{"site":{"siteMetadata":{"title":"hyesungoh","author":"hyesungoh","siteUrl":"https://www.hyesungoh.xyz","comment":{"disqusShortName":"","utterances":"hyesungoh/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"2c4f4234-7f89-5318-af5e-381ddcbc07fd","excerpt":"알파벳으로 이루어진 2차원 배열을 입력받는다. 상하좌우로 움직일 수 있으나 방문했던 알파벳은 방문할 수 없는 조건을 가질 때, 최대한 방문할 수 있는 알파벳의 수를 출력하는 문제. 첫 번째 풀이는 아스키코드를 기준으로 방문확인 배열을 만들어서 dfs 연산을 수행하여 풀었으나. 다른 노드가 방문했던 노드까지 방문했다고 확인을 하여 틀렸습니다 결과를 받게 되었다. 이를 수정하고자 q…","html":"<p>알파벳으로 이루어진 2차원 배열을 입력받는다. 상하좌우로 움직일 수 있으나 방문했던 알파벳은 방문할 수 없는 조건을 가질 때, 최대한 방문할 수 있는 알파벳의 수를 출력하는 문제. 첫 번째 풀이는 아스키코드를 기준으로 방문확인 배열을 만들어서 dfs 연산을 수행하여 풀었으나. 다른 노드가 방문했던 노드까지 방문했다고 확인을 하여 틀렸습니다 결과를 받게 되었다. 이를 수정하고자 q에 방문했던 알파벳들로 이루어진 문자열을 넣어 방문확인을 했으나 시간, 메모리 초과결과를 얻게 되었다. 세 번째 풀이는 첫 번째 풀이를 바탕으로 백트래킹을 사용하여 방문확인 후 재귀적으로 호출, 방문확인 해제하여 풀었다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># from collections import deque</span>\n<span class=\"token comment\"># import sys</span>\n<span class=\"token comment\"># input = sys.stdin.readline</span>\n<span class=\"token comment\"># dire = [[0, 1],</span>\n<span class=\"token comment\">#         [0, -1],</span>\n<span class=\"token comment\">#         [1, 0],</span>\n<span class=\"token comment\">#         [-1, 0]]</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># def return_ord(char):</span>\n<span class=\"token comment\">#     return ord(char) - 65</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># def check(char, visit, boolean):</span>\n<span class=\"token comment\">#     visit[return_ord(char)] = not visit[return_ord(char)]</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># def solve():</span>\n<span class=\"token comment\">#     visit = [False for _ in range(26)]</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     q = deque()</span>\n<span class=\"token comment\">#     # y, x, cnt</span>\n<span class=\"token comment\">#     q.append([0, 0, 1])</span>\n<span class=\"token comment\">#     check(graph[0][0], visit, True)</span>\n<span class=\"token comment\">#     ans = 0</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#    while q:</span>\n<span class=\"token comment\">#         y, x, cnt = q.popleft()</span>\n<span class=\"token comment\">#         ans = max(ans, cnt)</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#         for dy, dx in dire:</span>\n<span class=\"token comment\">#             ny = y + dy</span>\n<span class=\"token comment\">#             nx = x + dx</span>\n<span class=\"token comment\">#             if 0 &lt;= ny &lt; r and 0 &lt;= nx &lt; c:</span>\n<span class=\"token comment\">#                 if not visit[return_ord(graph[ny][nx])]:</span>\n<span class=\"token comment\">#                     check(graph[ny][nx], visit, True)</span>\n<span class=\"token comment\">#                     q.append([ny, nx, cnt+1])</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     return ans</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># r, c = map(int, input().split())</span>\n<span class=\"token comment\"># graph = [input() for _ in range(r)]</span>\n<span class=\"token comment\"># print(solve())</span>\n\n\n<span class=\"token comment\"># import sys</span>\n<span class=\"token comment\"># input = sys.stdin.readline</span>\n<span class=\"token comment\"># dire = [[0, 1],</span>\n<span class=\"token comment\">#         [0, -1],</span>\n<span class=\"token comment\">#         [1, 0],</span>\n<span class=\"token comment\">#         [-1, 0]]</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># def solve():</span>\n<span class=\"token comment\">#     q = set([(0, 0, 1, graph[0][0])])</span>\n<span class=\"token comment\">#     ans = 0</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     while q:</span>\n<span class=\"token comment\">#         y, x, cnt, visited = q.pop()</span>\n<span class=\"token comment\">#         ans = max(ans, cnt)</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#         for dy, dx in dire:</span>\n<span class=\"token comment\">#             ny = y + dy</span>\n<span class=\"token comment\">#             nx = x + dx</span>\n<span class=\"token comment\">#             if 0 &lt;= ny &lt; r and 0 &lt;= nx &lt; c:</span>\n<span class=\"token comment\">#                 if graph[ny][nx] not in visited:</span>\n<span class=\"token comment\">#                     q.add((ny, nx, cnt+1, visited + graph[ny][nx]))</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     return ans</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># r, c = map(int, input().split())</span>\n<span class=\"token comment\"># graph = [input() for _ in range(r)]</span>\n<span class=\"token comment\"># print(solve())</span>\n\n<span class=\"token keyword\">import</span> sys\n<span class=\"token builtin\">input</span> <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline\n\ndire <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">bt</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">,</span> depth<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">global</span> ans\n    ans <span class=\"token operator\">=</span> <span class=\"token builtin\">max</span><span class=\"token punctuation\">(</span>ans<span class=\"token punctuation\">,</span> depth<span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">for</span> ty<span class=\"token punctuation\">,</span> tx <span class=\"token keyword\">in</span> dire<span class=\"token punctuation\">:</span>\n        ny <span class=\"token operator\">=</span> y <span class=\"token operator\">+</span> ty\n        nx <span class=\"token operator\">=</span> x <span class=\"token operator\">+</span> tx\n\n        <span class=\"token keyword\">if</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> ny <span class=\"token operator\">&lt;</span> r <span class=\"token keyword\">and</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> nx <span class=\"token operator\">&lt;</span> c<span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">if</span> <span class=\"token keyword\">not</span> visit<span class=\"token punctuation\">[</span>graph<span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>nx<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                visit<span class=\"token punctuation\">[</span>graph<span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>nx<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n                bt<span class=\"token punctuation\">(</span>ny<span class=\"token punctuation\">,</span> nx<span class=\"token punctuation\">,</span> depth<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n                visit<span class=\"token punctuation\">[</span>graph<span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>nx<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">False</span>\n\n\nr<span class=\"token punctuation\">,</span> c <span class=\"token operator\">=</span> <span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nans <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\ngraph <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token builtin\">list</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">lambda</span> x<span class=\"token punctuation\">:</span> <span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token number\">65</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\nvisit <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token boolean\">False</span> <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">26</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\nvisit<span class=\"token punctuation\">[</span>graph<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\nbt<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>ans<span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"BOJ-1987 - Python","date":"January 24, 2021"}}},"pageContext":{"slug":"/Algorithm/BOJ-1987-Python/","previous":{"fields":{"slug":"/Algorithm/BOJ-1890-Python/"},"frontmatter":{"title":"BOJ-1890 - Python","category":"Algorithm","draft":false}},"next":{"fields":{"slug":"/Algorithm/BOJ-2294-Python/"},"frontmatter":{"title":"BOJ-2294 - Python","category":"Algorithm","draft":false}}}},"staticQueryHashes":["3128451518","3290666882"]}