<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>PRESENT</title>
    <link>https://cijbest.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 29 May 2026 08:33:37 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>by cijbest</managingEditor>
    <image>
      <title>PRESENT</title>
      <url>https://tistory1.daumcdn.net/tistory/4305408/attach/f7745bc6c405498997b958849cd83b2a</url>
      <link>https://cijbest.tistory.com</link>
    </image>
    <item>
      <title>[백준 14500 : PYTHON] 테트로미노</title>
      <link>https://cijbest.tistory.com/87</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 풀기 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14500&quot;&gt;14500번&lt;/a&gt;&lt;/h2&gt;
&lt;figure id=&quot;og_1623738229777&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;14500번: 테트로미노&quot; data-og-description=&quot;폴리오미노란 크기가 1&amp;times;1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/14500&quot; data-og-url=&quot;https://www.acmicpc.net/problem/14500&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bsRUEW/hyKAmidKec/3OXmk88VUDDi1fnF3GcbIK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/Abz0J/hyKy26LpJN/bgKAXOSHMuyKv2mloqPqTK/img.png?width=500&amp;amp;height=333&amp;amp;face=0_0_500_333&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14500&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/14500&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bsRUEW/hyKAmidKec/3OXmk88VUDDi1fnF3GcbIK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/Abz0J/hyKy26LpJN/bgKAXOSHMuyKv2mloqPqTK/img.png?width=500&amp;amp;height=333&amp;amp;face=0_0_500_333');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;14500번: 테트로미노&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;폴리오미노란 크기가 1&amp;times;1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴리오미노란 크기가 1&amp;times;1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정사각형은 서로 겹치면 안 된다.&lt;/li&gt;
&lt;li&gt;도형은 모두 연결되어 있어야 한다.&lt;/li&gt;
&lt;li&gt;정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;333&quot; width=&quot;250&quot; height=&quot;167&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OrWPG/btq7iaQzWSb/1hPVZFkRiXxOXY73wPcofk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OrWPG/btq7iaQzWSb/1hPVZFkRiXxOXY73wPcofk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OrWPG/btq7iaQzWSb/1hPVZFkRiXxOXY73wPcofk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOrWPG%2Fbtq7iaQzWSb%2F1hPVZFkRiXxOXY73wPcofk%2Fimg.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;333&quot; width=&quot;250&quot; height=&quot;167&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아름이는 크기가 N&amp;times;M인 종이 위에 테트로미노 하나를 적절히 놓아서 테트로미노가 놓인 칸에 쓰여 있는 수들의 합을 최대로 하는 수를 구하라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테트로미노는 회전이나 대칭을 시켜도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보드위에 테트로미노 &lt;u&gt;&lt;b&gt;하나&lt;/b&gt;&lt;/u&gt;를 놓아서 가장 최대가 되는 수를 찾는 문제이다. (&lt;s&gt;처음엔 여러 개 놓는 문제인 줄 알았다...&lt;/s&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5개의 테트로미노를 어떻게 놓을지 고민해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테트로미노를 자세히보면 4개의 정사각형으로 이루어져 있고 4개의 테트로미노는 연달아 이을 수 있지만 1개는 그렇지 않다. 그림을 보자!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;220&quot; width=&quot;500&quot; height=&quot;166&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VnggR/btq7h7GvWg9/4Z6d5hK0UkJ5x0htTNGlT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VnggR/btq7h7GvWg9/4Z6d5hK0UkJ5x0htTNGlT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VnggR/btq7h7GvWg9/4Z6d5hK0UkJ5x0htTNGlT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVnggR%2Fbtq7h7GvWg9%2F4Z6d5hK0UkJ5x0htTNGlT0%2Fimg.png&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;220&quot; width=&quot;500&quot; height=&quot;166&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽에 있는 테트로미노는 dfs로 상하좌우 최대 4번까지 돌려서 모양을 얻을 수 있지만, 오른쪽에 있는 테트로미노는 경우를 다르게 해주어야 한다는 것을 알 수 있을 것이다. 이해가 안 된다면 다음 설명을 보면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽을 먼저 살펴보자!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;344&quot; width=&quot;500&quot; height=&quot;205&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsH5fQ/btq7mzuRDoR/wkAQUELeUlmVMkZkm06TE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsH5fQ/btq7mzuRDoR/wkAQUELeUlmVMkZkm06TE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsH5fQ/btq7mzuRDoR/wkAQUELeUlmVMkZkm06TE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsH5fQ%2Fbtq7mzuRDoR%2FwkAQUELeUlmVMkZkm06TE0%2Fimg.png&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;344&quot; width=&quot;500&quot; height=&quot;205&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회전과 대치를 시킨 모양들이다. 이 모양들은 상하좌우로 단 4번의 움직임으로 나올 수 있는 모든 모양이다. 신기했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진짜 그럴까 하신 분들은 아래의 표에서 아무렇게나 4번 움직여서 확인하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;223&quot; data-origin-height=&quot;216&quot; width=&quot;170&quot; height=&quot;165&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ewMUEF/btq7n3a55cM/AkBU3PkvCBDrKzJLgAGJB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ewMUEF/btq7n3a55cM/AkBU3PkvCBDrKzJLgAGJB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ewMUEF/btq7n3a55cM/AkBU3PkvCBDrKzJLgAGJB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FewMUEF%2Fbtq7n3a55cM%2FAkBU3PkvCBDrKzJLgAGJB0%2Fimg.png&quot; data-origin-width=&quot;223&quot; data-origin-height=&quot;216&quot; width=&quot;170&quot; height=&quot;165&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이제 오른쪽에 있는 모양의 경우의 수를 따져보자면 이렇다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;118&quot; width=&quot;300&quot; height=&quot;79&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJlzBO/btq7gYpwh3F/gitHCGDfuBM22g74lksWwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJlzBO/btq7gYpwh3F/gitHCGDfuBM22g74lksWwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJlzBO/btq7gYpwh3F/gitHCGDfuBM22g74lksWwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJlzBO%2Fbtq7gYpwh3F%2FgitHCGDfuBM22g74lksWwK%2Fimg.png&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;118&quot; width=&quot;300&quot; height=&quot;79&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우엔 가운데를 중심으로 3개의 날개(?)를 고려하면된다. 위에선 상하좌우 4가지 방향을 고려했지만 여기선 dfs를 돌릴 필요도 없고 4가지 경우를 순차적으로 확인하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;135&quot; width=&quot;350&quot; height=&quot;98&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wPPGZ/btq7kkkBd1T/rk6qzD0aA9ALuzp31nZCyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wPPGZ/btq7kkkBd1T/rk6qzD0aA9ALuzp31nZCyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wPPGZ/btq7kkkBd1T/rk6qzD0aA9ALuzp31nZCyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwPPGZ%2Fbtq7kkkBd1T%2Frk6qzD0aA9ALuzp31nZCyK%2Fimg.png&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;135&quot; width=&quot;350&quot; height=&quot;98&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드에서 중요한 부분을 몇 가지 언급하자면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dfs를 돌릴 땐 중복 방문을 피하기 위해 visited를 만들어 방문여부를 꼭 확인하고 dfs가 끝나면 방문했던 곳은 방문해제를 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㅗ 모양의 날개(?)부분을 확인할 때 방향 한 개만 뺀 경우를 따질 때는 좌표를 미리 적어두어 사용해도 되지만 나의 경우엔 상하좌우(move) 배열을 그대로 사용했다.&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt; t = (n+k)%4 &lt;/span&gt;계산식을 사용해서 3개의 인덱스만을 탐색했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전체코드&lt;/h2&gt;
&lt;pre id=&quot;code_1623740433246&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

# 상, 하, 좌, 우
move = [(0, 1), (0, -1), (1, 0), (-1, 0)]

# INPUT
N, M = map(int, input().split())
board = [list(map(int,input().split())) for _ in range(N)]
visited = [[False] * M for _ in range(N)]

# 최대값 변수
maxValue = 0

# ㅗ, ㅜ, ㅓ, ㅏ 제외한 모양들 최대값 계산
def dfs(i, j, dsum, cnt):
    global maxValue
    # 모양 완성되었을 때 최대값 계산
    if cnt == 4:
        maxValue = max(maxValue, dsum)
        return

    # 상, 하, 좌, 우로 이동
    for n in range(4):
        ni = i+move[n][0]
        nj = j+move[n][1]
        if 0 &amp;lt;= ni &amp;lt; N and 0 &amp;lt;= nj &amp;lt; M and not visited[ni][nj]:
            # 방문 표시 및 제거
            visited[ni][nj] = True
            dfs(ni, nj, dsum + board[ni][nj], cnt+1)
            visited[ni][nj] = False


# ㅗ, ㅜ, ㅓ, ㅏ 모양의 최대값 계산
def exce(i, j):
    global maxValue
    for n in range(4):
        # 초기값은 시작지점의 값으로 지정
        tmp = board[i][j]
        for k in range(3):
            # move 배열의 요소를 3개씩 사용할 수 있도록 인덱스 계산
            # 012, 123, 230, 301
            t = (n+k)%4
            ni = i+move[t][0]
            nj = j+move[t][1]

            if not (0 &amp;lt;= ni &amp;lt; N and 0 &amp;lt;= nj &amp;lt; M):
                tmp = 0
                break
            tmp += board[ni][nj]
        # 최대값 계산
        maxValue = max(maxValue, tmp)


for i in range(N):
    for j in range(M):
        # 시작점 visited 표시
        visited[i][j] = True
        dfs(i, j, board[i][j], 1)
        visited[i][j] = False

        exce(i, j)

print(maxValue)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘/시뮬레이션</category>
      <author>by cijbest</author>
      <guid isPermaLink="true">https://cijbest.tistory.com/87</guid>
      <comments>https://cijbest.tistory.com/87#entry87comment</comments>
      <pubDate>Tue, 15 Jun 2021 16:08:37 +0900</pubDate>
    </item>
    <item>
      <title>[백준 12100 : PYTHON] 2048 (Easy)</title>
      <link>https://cijbest.tistory.com/86</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 풀기 :&lt;span&gt; &lt;/span&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/12100&quot;&gt;12100번&lt;/a&gt;&lt;/h2&gt;
&lt;figure id=&quot;og_1623589439690&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;12100번: 2048 (Easy)&quot; data-og-description=&quot;첫째 줄에 보드의 크기 N (1 &amp;le; N &amp;le; 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/12100&quot; data-og-url=&quot;https://www.acmicpc.net/problem/12100&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gt1Hu/hyKxOndcGI/fv8MMOiMkci2xVSCsjneNk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/JZP4q/hyKyUsx0e6/ZsY8zvGGlqCMKuDJplKWa0/img.png?width=1064&amp;amp;height=1066&amp;amp;face=0_0_1064_1066,https://scrap.kakaocdn.net/dn/Mm8vd/hyKyWDT8G7/Skyz2btkEHVKIAvRCa1BD1/img.png?width=1040&amp;amp;height=1058&amp;amp;face=0_0_1040_1058&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/12100&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/12100&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gt1Hu/hyKxOndcGI/fv8MMOiMkci2xVSCsjneNk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/JZP4q/hyKyUsx0e6/ZsY8zvGGlqCMKuDJplKWa0/img.png?width=1064&amp;amp;height=1066&amp;amp;face=0_0_1064_1066,https://scrap.kakaocdn.net/dn/Mm8vd/hyKyWDT8G7/Skyz2btkEHVKIAvRCa1BD1/img.png?width=1040&amp;amp;height=1058&amp;amp;face=0_0_1040_1058');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;12100번: 2048 (Easy)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 보드의 크기 N (1 &amp;le; N &amp;le; 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번의 이동은 보드 위에 있는 전체 블록을 상하좌우 네 방향 중 하나로 이동시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 값을 갖는 두 블록이 충돌하면 두 블록은 하나로 합쳐지게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번의 이동에서 이미 합쳐진 블록은 또 다른 블록과 다시 합쳐질 수 없다. (실제 게임에서는 이동을 한 번 할 때마다 블록이 추가되지만, 이 문제에서 블록이 추가되는 경우는 없다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;보드의 크기는 N&amp;times;N 이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;보드의 크기와 보드판의 블록 상태가 주어졌을 때, 최대 5번 이동해서 만들 수 있는 가장 큰 블록의 값을 구하라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 dfs, bfs 둘 다 사용해서 풀 수 있는 문제로 필자는 dfs로 접근해서 문제를 풀었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dfs 코드 작성은 쉽다. 상, 하, 좌, 우로 dfs를 돌리고 5번을 다 돌렸을 때 배열에서 가장 큰 값의 요소를 리턴해주면 4방향의 리턴값들 중 다시 최대값을 리턴하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 어려웠던 부분은 4방향으로 움직이는 함수들을 만드는 것이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위로 움직였을 때의 상태를 예시로 들자면, 열순으로 두번째 행부터 탐색해주어야 한다. 이렇게 해주는 이유는 포인터를 사용하기 위함이다. 포인터는 가장 맨 앞쪽부터 위치해서 포인터가 가리키는 숫자들과 탐색되어지는 숫자들을 비교해 값을 변경하는 용도를 쓰여질 것이다. 이렇게 하는 이유는 경우의 수들을 보면 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;200&quot; height=&quot;196&quot; data-origin-width=&quot;285&quot; data-origin-height=&quot;279&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WTPrd/btq67RiZvK4/TnVEoHNuMxMKPBriGi2NKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WTPrd/btq67RiZvK4/TnVEoHNuMxMKPBriGi2NKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WTPrd/btq67RiZvK4/TnVEoHNuMxMKPBriGi2NKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWTPrd%2Fbtq67RiZvK4%2FTnVEoHNuMxMKPBriGi2NKk%2Fimg.png&quot; width=&quot;200&quot; height=&quot;196&quot; data-origin-width=&quot;285&quot; data-origin-height=&quot;279&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이제 경우의 수를 따져야 한다. &lt;u&gt;&lt;b&gt;경우의 수는 3가지&lt;/b&gt;&lt;/u&gt;로 나뉠 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;333&quot; data-origin-height=&quot;162&quot; width=&quot;250&quot; height=&quot;122&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dM39FM/btq7gWpWisq/HUAxfFM4KSerkUQObJxw4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dM39FM/btq7gWpWisq/HUAxfFM4KSerkUQObJxw4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dM39FM/btq7gWpWisq/HUAxfFM4KSerkUQObJxw4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdM39FM%2Fbtq7gWpWisq%2FHUAxfFM4KSerkUQObJxw4K%2Fimg.png&quot; data-origin-width=&quot;333&quot; data-origin-height=&quot;162&quot; width=&quot;250&quot; height=&quot;122&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;포인터가 가리키는 수가 0일 때&lt;/li&gt;
&lt;li&gt;포인터가 가리키는 수가 현재 위치의 수와 같을 때&lt;/li&gt;
&lt;li&gt;포인터가 가리키는 수가 현재 위치의 수와 다를 때&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째, 포인터가 가리키는 수가 0이라면 그 자리에 0이 아닌 수를 배치시켜야 하므로 현재 탐색한 수가 0이 아니면 포인터가 가리키는 곳에 탐색한 수를 넣는다. 현재 위치는 0으로 비워준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째, 포인터가 가리키는 수가 현재 위치와 같다면 포인터의 수를 2배로 만들고 현재 위치는 0으로 만든 후에 포인터를 하나 증가시킨다. 포인터를 증가시키는 이유는 같은 수가 여러 개 연달아 있을 때 중복으로 더해질 수 있기 때문이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;475&quot; width=&quot;600&quot; height=&quot;337&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xxvym/btq7h6si4OQ/Mi4mWgtyFD5uk6JoKsvizk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xxvym/btq7h6si4OQ/Mi4mWgtyFD5uk6JoKsvizk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xxvym/btq7h6si4OQ/Mi4mWgtyFD5uk6JoKsvizk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXxvym%2Fbtq7h6si4OQ%2FMi4mWgtyFD5uk6JoKsvizk%2Fimg.png&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;475&quot; width=&quot;600&quot; height=&quot;337&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째, 포인터가 가리키는 수가 현재 위치의 수와 다르면 포인터만 하나 증가시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전체코드&lt;/h2&gt;
&lt;pre id=&quot;code_1623646627342&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
from copy import deepcopy
input = sys.stdin.readline

# INPUT
n = int(input())
board = [list(map(int, input().split())) for _ in range(n)]
answer = 0

# UP
def up(board):
    for j in range(n):
        pointer = 0
        for i in range(1, n):
            if board[i][j]:
                tmp = board[i][j]
                board[i][j] = 0
                # 포인터가 가리키는 수가 0일 때
                if board[pointer][j] == 0:
                    board[pointer][j] = tmp
                # 포인터가 가리키는 수와 현재 위치의 수가 같을 때
                elif board[pointer][j]  == tmp:
                    board[pointer][j] *= 2
                    pointer += 1
                # 포인터가 가리키는 수와 현재 위치의 수가 다를 때
                else:
                    pointer += 1
                    board[pointer][j] = tmp
    return board

# DOWN
def down(board):
    for j in range(n):
        pointer = n - 1
        for i in range(n - 2, -1, -1):
            if board[i][j]:
                tmp = board[i][j]
                board[i][j] = 0
                if board[pointer][j] == 0:
                    board[pointer][j] = tmp
                elif board[pointer][j]  == tmp:
                    board[pointer][j] *= 2
                    pointer -= 1
                else:
                    pointer -= 1
                    board[pointer][j] = tmp
    return board

# LEFT
def left(board):
    for i in range(n):
        pointer = 0
        for j in range(1, n):
            if board[i][j]:
                tmp = board[i][j]
                board[i][j] = 0
                if board[i][pointer] == 0:
                    board[i][pointer] = tmp
                elif board[i][pointer]  == tmp:
                    board[i][pointer] *= 2
                    pointer += 1
                else:
                    pointer += 1
                    board[i][pointer]= tmp
    return board

# RIGHT
def right(board):
    for i in range(n):
        pointer = n - 1
        for j in range(n - 2, -1, -1):
            if board[i][j]:
                tmp = board[i][j]
                board[i][j] = 0
                if board[i][pointer] == 0:
                    board[i][pointer] = tmp
                elif board[i][pointer]  == tmp:
                    board[i][pointer] *= 2
                    pointer -= 1
                else:
                    pointer -= 1
                    board[i][pointer] = tmp
    return board


# DFS
def dfs(board, cnt):
    if cnt == 5:
        # 2차원 배열 요소 중 가장 큰 값 반환
        return max(map(max, board))

    # 상, 하, 좌, 우로 움직여 리턴한 값들 중 가장 큰 값 반환
    # board를 꼭 deepcopy하여 함수를 거친 board값이 다음 함수에 들어가지 못하도록 해주어야 한다.
    return max(dfs(up(deepcopy(board)), cnt + 1), dfs(down(deepcopy(board)), cnt + 1), dfs(left(deepcopy(board)), cnt + 1), dfs(right(deepcopy(board)), cnt + 1))

print(dfs(board, 0))&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘/시뮬레이션</category>
      <author>by cijbest</author>
      <guid isPermaLink="true">https://cijbest.tistory.com/86</guid>
      <comments>https://cijbest.tistory.com/86#entry86comment</comments>
      <pubDate>Mon, 14 Jun 2021 13:57:25 +0900</pubDate>
    </item>
    <item>
      <title>[백준 13458 : PYTHON] 시험 감독</title>
      <link>https://cijbest.tistory.com/85</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 풀기 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/13458&quot;&gt;13458번&lt;/a&gt;&lt;/h2&gt;
&lt;figure id=&quot;og_1623587971543&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;13458번: 시험 감독&quot; data-og-description=&quot;첫째 줄에 시험장의 개수 N(1 &amp;le; N &amp;le; 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 &amp;le; Ai &amp;le; 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 &amp;le; B, C &amp;le; 1,000,000)&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/13458&quot; data-og-url=&quot;https://www.acmicpc.net/problem/13458&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhMTMN/hyKxGCFybZ/BNUPtKJJGrFb2hlMm8BRtk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/13458&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/13458&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhMTMN/hyKxGCFybZ/BNUPtKJJGrFb2hlMm8BRtk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;13458번: 시험 감독&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 시험장의 개수 N(1 &amp;le; N &amp;le; 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 &amp;le; Ai &amp;le; 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 &amp;le; B, C &amp;le; 1,000,000)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 C명이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 시험장의 감독관을 정할 때 총감독관을 먼저 배치한다. 총감독관이 감시할 수 있는 사람(B)을 시험장에 있는 사람을 다 커버할 수 있으면 감독관 수를 증가시키고 커버할 수 없으면 부감독관의 수를 구한다. 부감독관은 남은 사람들에서 부감독관이 감독할 수 있는 사람(C)만큼 나눈다. 나머지가 0이면 나눈 몫만큼이 부감독관 수가 되고 나머지가 0이 아니면 나눈 몫에 부감독관 한명을 더 추가시킨 것이 부감독관의 수가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 시험장 사람 : 15명, 부감독이 감시할 수 있는 사람 : 4 일때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;15 / 4 = 3(몫)...3(나머지)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;필요한 부감독수 : 4명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전체코드&lt;/h2&gt;
&lt;pre id=&quot;code_1623587928357&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
sys.stdin.readline

# INPUT
N = int(input())
data = list(map(int, input().split()))
B, C = map(int, input().split())

# 감독관 수
cnt = 0

for d in data:
    # 총감독이 감독할 수 있는 사람 빼기
    d -= B
    # 아직 감독해야할 사람이 있는 경우
    if d &amp;gt; 0:
        # 부감독관이 감독할 수 있는 사람이 딱 떨어지는 경우(총감독관 1명 포함)
        if (d/C) == int(d/C):
            cnt += 1 + (d/C)
        # 부감독관이 감독할 수 있는 사람보다 조금 더 있는 경우(총감독관 1명 포함)
        else:
            cnt += 1 + int(d/C) + 1
    # 총감독만으로 시험장 감독이 가능한 경우
    else:
        cnt += 1
        
print(int(cnt))&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘/시뮬레이션</category>
      <author>by cijbest</author>
      <guid isPermaLink="true">https://cijbest.tistory.com/85</guid>
      <comments>https://cijbest.tistory.com/85#entry85comment</comments>
      <pubDate>Sun, 13 Jun 2021 21:57:29 +0900</pubDate>
    </item>
    <item>
      <title>[백준 14499 : PYTHON] 주사위 굴리기</title>
      <link>https://cijbest.tistory.com/84</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 풀기 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14499&quot;&gt;14499번&lt;/a&gt;&lt;/h2&gt;
&lt;figure id=&quot;og_1623571007297&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;14499번: 주사위 굴리기&quot; data-og-description=&quot;첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 &amp;le; N, M &amp;le; 20),&amp;nbsp;주사위를 놓은 곳의 좌표 x y(0 &amp;le; x &amp;le; N-1, 0 &amp;le; y &amp;le; M-1), 그리고 명령의 개수 K (1 &amp;le; K &amp;le; 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/14499&quot; data-og-url=&quot;https://www.acmicpc.net/problem/14499&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bobhij/hyKxP7jvJH/tt82TTAPrJIfTwR7t117i1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14499&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/14499&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bobhij/hyKxP7jvJH/tt82TTAPrJIfTwR7t117i1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;14499번: 주사위 굴리기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 &amp;le; N, M &amp;le; 20),&amp;nbsp;주사위를 놓은 곳의 좌표 x y(0 &amp;le; x &amp;le; N-1, 0 &amp;le; y &amp;le; M-1), 그리고 명령의 개수 K (1 &amp;le; K &amp;le; 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N&amp;times;M인 지도가 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지도의 오른쪽은 동쪽, 위쪽은 북쪽이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 처음에 주사위에는 모든 면에 0이 적혀져 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지도의 각 칸에는 정수가 하나씩 쓰여져 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주사위를 굴렸을 때, 이동한 칸에 쓰여 있는 수가 0이면, 주사위의 바닥면에 쓰여 있는 수가 칸에 복사된다.&lt;/li&gt;
&lt;li&gt;0이 아닌 경우에는 칸에 쓰여 있는 수가 주사위의 바닥면으로 복사되며, 칸에 쓰여 있는 수는 0이 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주사위를 굴릴 때마다 상하좌우로 바뀌는 주사위의 숫자를 어떻게 따져줘야 할 지 몰라서 문제를 못 풀고 있었다. 다른 사람들의 풀이를 봐도 이해를 못하다가 여러 풀이를 보고 깨달았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제를 최대한 쉽게 설명해보려 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선! 주사위가 움직일 때마다 &lt;b&gt;&lt;u&gt;주사위의 윗면과 밑면을 고정할 수 있는&amp;nbsp;방법이 무엇인지&lt;/u&gt;&lt;/b&gt;를 생각해야 한다. 문제에서 전개도를 괜히 준게 아니었다! 전개도는 주사위가 움직일 때마다 변하는 주사위 값의 위치를 지정할 수 있는 유일한 방법이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;207&quot; data-origin-height=&quot;224&quot; width=&quot;160&quot; height=&quot;173&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjm9JG/btq64M3u5vS/YRgHiagV6HevlKyTpXzdZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjm9JG/btq64M3u5vS/YRgHiagV6HevlKyTpXzdZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjm9JG/btq64M3u5vS/YRgHiagV6HevlKyTpXzdZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcjm9JG%2Fbtq64M3u5vS%2FYRgHiagV6HevlKyTpXzdZK%2Fimg.png&quot; data-origin-width=&quot;207&quot; data-origin-height=&quot;224&quot; width=&quot;160&quot; height=&quot;173&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제에 있는 전개도이다. 핵심은 전개도에 있는 저 숫자들을 &lt;u&gt;&lt;b&gt;고정된 인덱스로&lt;/b&gt;&lt;/u&gt; 정하는 거다! 예를 들어 1이 있는 위치는 1번 인덱스라고 고정을 하는 것이다. 그렇게 하면 고정된 전개도 내에서 규칙(동서남북)만 찾는다면 값의 위치가 변해도 같은 주사위인 것이다. (코드에서 dice 변수는 각 인덱스의 값들을 저장하는 배열이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 이해가 되지 않는다면 다음 규칙을 보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;251&quot; width=&quot;600&quot; height=&quot;202&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caH5wj/btq7bEv0sFN/JOSDxNPAF6heqS9lcHe97K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caH5wj/btq7bEv0sFN/JOSDxNPAF6heqS9lcHe97K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caH5wj/btq7bEv0sFN/JOSDxNPAF6heqS9lcHe97K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaH5wj%2Fbtq7bEv0sFN%2FJOSDxNPAF6heqS9lcHe97K%2Fimg.png&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;251&quot; width=&quot;600&quot; height=&quot;202&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번 인덱스를 기준으로 동쪽으로 이동했을 때의 바뀐 전개도이다. 4개의 인덱스 위치가 변경되었고 다른 방향도 바뀌는 상태를 따져주어 적용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;264&quot; width=&quot;610&quot; height=&quot;218&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qkp2w/btq7bEJykSr/W7doOa0HY8R6K65DuzjUf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qkp2w/btq7bEJykSr/W7doOa0HY8R6K65DuzjUf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qkp2w/btq7bEJykSr/W7doOa0HY8R6K65DuzjUf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqkp2w%2Fbtq7bEJykSr%2FW7doOa0HY8R6K65DuzjUf0%2Fimg.png&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;264&quot; width=&quot;610&quot; height=&quot;218&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4방향의 변경된 인덱스 위치는 다음과 같다. 바뀐 인덱스대로 값을 변경해주는 함수는 changDiceState이므로 코드에서 확인하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 주사위의 상태를 바꿀 수 있다면 다 되었다. 주사위의 윗면은 dice[1]이라는 것과 밑면은 dice[6]이라는 것을 이용하면 나머지 코드는 짤 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드에서는 배열의 인덱스 특성상 0부터 시작하기 때문에 위의 전개도의 인덱스들은 1부터 시작하지만 코드를 작성할 때는 0에 맞추어 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전체코드&lt;/h2&gt;
&lt;pre id=&quot;code_1623586800853&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

# 동, 서, 북, 남
direct = [(0, 1), (0, -1), (-1, 0), (1, 0)]

#INPUT
n, m, x, y, k = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(n)]
move = list(map(int, input().split()))

# 주사위에 적힌 수 보관 (전개도)
dice = [0] * 6

def changeDiceState(i):
    if i == 1:
        dice[0], dice[2], dice[3], dice[5] = dice[3], dice[0], dice[5], dice[2]
    elif i == 2:
        dice[0], dice[2], dice[3], dice[5] = dice[2], dice[5], dice[0], dice[3]
    elif i == 3:
        dice[0], dice[1], dice[4], dice[5] = dice[4], dice[0], dice[5], dice[1]
    else:
        dice[0], dice[1], dice[4], dice[5] = dice[1], dice[5], dice[0], dice[4]

for i in move:
    nx = x + direct[i-1][0]
    ny = y + direct[i-1][1]
    
    # 범위 밖에 있으면 명령 건너뛰기
    if nx &amp;lt; 0 or ny &amp;lt; 0 or nx &amp;gt; n - 1 or ny &amp;gt; m - 1:
        continue

    # 주사위 전개도 배치 바꾸기
    changeDiceState(i)

    # 지도 칸의 숫자가 0일 때
    if board[nx][ny] == 0:
        board[nx][ny] = dice[5]
    # 지도 칸의 숫자가 0이 아닐 때
    else:
        dice[5] = board[nx][ny]
        board[nx][ny] = 0
    
    x = nx
    y = ny

    # 주사위 윗면 출력
    print(dice[0])&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘/시뮬레이션</category>
      <author>by cijbest</author>
      <guid isPermaLink="true">https://cijbest.tistory.com/84</guid>
      <comments>https://cijbest.tistory.com/84#entry84comment</comments>
      <pubDate>Sun, 13 Jun 2021 21:32:36 +0900</pubDate>
    </item>
    <item>
      <title>[백준 3190 : PYTHON] 뱀</title>
      <link>https://cijbest.tistory.com/83</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 풀기 :&lt;span&gt; &lt;/span&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3190&quot;&gt;3190번&lt;/a&gt;&lt;/h2&gt;
&lt;figure id=&quot;og_1623566842849&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;3190번: 뱀&quot; data-og-description=&quot;&amp;nbsp;'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/3190&quot; data-og-url=&quot;https://www.acmicpc.net/problem/3190&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cPjwhj/hyKxGWLUPx/xB897hGvzn2DPNgXrVMq71/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3190&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/3190&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cPjwhj/hyKxGWLUPx/xB897hGvzn2DPNgXrVMq71/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;3190번: 뱀&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NxN 정사각 보드위에서 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇몇 칸에는 사과가 놓여져 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보드의 상하좌우 끝에 벽이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뱀은 맨위 맨좌측에 위치한다. 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;먼저 뱀은 몸길이를 늘려&amp;nbsp;머리를&amp;nbsp;다음칸에 위치시킨다.&lt;/li&gt;
&lt;li&gt;만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다.&lt;/li&gt;
&lt;li&gt;만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸길이는 변하지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사과의 위치와 뱀의 이동경로가 주어질 때 이 게임이 몇 초에 끝나는지 계산하라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 뱀의 위치를 큐에 넣어서 보관한다. 뱀이 이동할 때 머리와 꼬리의 변화만 있기 때문이다. 배열말고 큐를 사용하는 이유는 삽입, 삭제 시 logN만큼의 시간이 걸리기 때문에 효율성이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 뱀이 움직이는 방향 인덱스 변수(idx)를 만들어서 인덱스번호에 맞춰 move배열에 배치시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 경우엔 왼쪽으로 90도 돌렸을 때의 방향들 순으로 배치했다. (오른쪽 &amp;rarr; 위 &amp;rarr; 왼쪽 &amp;rarr; 아래)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오른쪽 90도의 경우에는 인덱스 반대방향이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;588&quot; data-origin-height=&quot;263&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdyjKZ/btq64w7FfwB/DtnmK5UeVmCSSyeE6pKPMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdyjKZ/btq64w7FfwB/DtnmK5UeVmCSSyeE6pKPMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdyjKZ/btq64w7FfwB/DtnmK5UeVmCSSyeE6pKPMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdyjKZ%2Fbtq64w7FfwB%2FDtnmK5UeVmCSSyeE6pKPMK%2Fimg.png&quot; data-origin-width=&quot;588&quot; data-origin-height=&quot;263&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. X(초), C(방향)는 각각 따로 배열에 저장한다. while 문으로 1초씩 움직이면서 X에 방향 바꿀 시간이 되면 방향의 타입(L 또는 D)에 따라 뱀의 방향(idx)을 바꿔준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방향 바꿀 시간이 아니라면, 뱀의 다음 방향(nx, ny)이&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;벽이나 자기 자신이라면 while문을 빠져 나가고&lt;/li&gt;
&lt;li&gt;사과라면 현재 사과 위치를 snake 큐 맨앞에 넣어 뱀의 몸 길이를 늘린다. 사과를 먹었으므로 사과 위치(7)를 뱀이 지나다닐 수 있는 위치(0)으로 바꿔준다.&lt;/li&gt;
&lt;li&gt;사과가 아니면 다음 위치를 뱀의 머리(큐 맨앞)에 위치시키고 꼬리 위치(큐 맨끝)를 없앤다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 카운트는 뱀이 시작할 때 시작 위치에 위치하는 시간까지 포함해야 하므로 +1을 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전체코드&lt;/h2&gt;
&lt;pre id=&quot;code_1623569925821&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline
from collections import deque

# 뱀의 현재위치
snake = deque()
snake.appendleft([0,0])

# 왼쪽 90도 기준 (오, 위, 왼, 아)
move = [[0, 1], [-1, 0], [0, -1], [1, 0]]

# 뱀의 현재 방향
idx = 0

# INPUT
N = int(input())
board = [[0] * N for _ in range(N)]

K = int(input())
for _ in range(K):
    x, y = map(int, input().split())
    # 사과 위치 표시
    board[x-1][y-1] = 7

# 게임 시간
sec = 0

L = int(input())
X = []
C = []
for i in range(L):
    t1, t2 = input().split()
    X.append(int(t1))
    C.append(t2)

while True:
    # 방향 바꾸는 시간이 되었을 때
    if sec in X:
        # 방향바꾸기
        d = C[X.index(sec)]    
        
        # 왼쪽 90도
        if d == 'L':
            idx = (idx + 1) % 4
        # 오른쪽 90도
        else:
            if (idx - 1) == -1:
                idx = 3
            else:
                idx = (idx - 1) % 4

    nx = snake[0][0] + move[idx][0]
    ny = snake[0][1] + move[idx][1]

    # 벽에 부딪히거나 자기 자신을 만났을 때
    if nx &amp;lt; 0 or ny &amp;lt; 0 or nx &amp;gt; N-1 or ny &amp;gt; N-1 or ([nx, ny] in snake) :
        break
    # 사과일 때
    if board[nx][ny] == 7:
        snake.appendleft([nx, ny])
        board[nx][ny] = 0
    # 사과 아닐 때
    else:
        # 머리 위치 변경, 꼬리 줄이기
        snake.appendleft([nx, ny])
        snake.pop()

    sec += 1
        
# 뱀이 처음 시작자리에 놓이는 시간 포함  
print(sec + 1)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘/시뮬레이션</category>
      <author>by cijbest</author>
      <guid isPermaLink="true">https://cijbest.tistory.com/83</guid>
      <comments>https://cijbest.tistory.com/83#entry83comment</comments>
      <pubDate>Sun, 13 Jun 2021 16:42:29 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 : PYTHON] 다트 게임</title>
      <link>https://cijbest.tistory.com/82</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;다트 게임&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카카오톡에 뜬 네 번째 별! 심심할 땐? 카카오톡 게임별~&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;400&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctWM3M/btq6CBzTLzA/CDLdjk5nuqAULz3FuDNz81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctWM3M/btq6CBzTLzA/CDLdjk5nuqAULz3FuDNz81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctWM3M/btq6CBzTLzA/CDLdjk5nuqAULz3FuDNz81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctWM3M%2Fbtq6CBzTLzA%2FCDLdjk5nuqAULz3FuDNz81%2Fimg.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;400&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.&lt;br /&gt;갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다트 게임은 총 3번의 기회로 구성된다.&lt;/li&gt;
&lt;li&gt;각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다.&lt;/li&gt;
&lt;li&gt;점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수1&lt;span&gt;&amp;nbsp;&lt;/span&gt;, 점수2&lt;span&gt;&amp;nbsp;&lt;/span&gt;, 점수3&lt;span&gt;&amp;nbsp;&lt;/span&gt;)으로 계산된다.&lt;/li&gt;
&lt;li&gt;옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다.&lt;/li&gt;
&lt;li&gt;스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. (예제 4번 참고)&lt;/li&gt;
&lt;li&gt;스타상(*)의 효과는 다른 스타상(*)의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(*) 점수는 4배가 된다. (예제 4번 참고)&lt;/li&gt;
&lt;li&gt;스타상(*)의 효과는 아차상(#)의 효과와 중첩될 수 있다. 이 경우 중첩된 아차상(#)의 점수는 -2배가 된다. (예제 5번 참고)&lt;/li&gt;
&lt;li&gt;Single(S), Double(D), Triple(T)은 점수마다 하나씩 존재한다.&lt;/li&gt;
&lt;li&gt;스타상(*), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입력 형식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;점수|보너스|[옵션]&quot;으로 이루어진 문자열 3세트.&lt;br /&gt;예)&lt;span&gt;&amp;nbsp;&lt;/span&gt;1S2D*3T&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;점수는 0에서 10 사이의 정수이다.&lt;/li&gt;
&lt;li&gt;보너스는 S, D, T 중 하나이다.&lt;/li&gt;
&lt;li&gt;옵선은 *이나 # 중 하나이며, 없을 수도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;출력 형식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.&lt;br /&gt;예) 37&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예제&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.8605%;&quot;&gt;&lt;b&gt;예제&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;&lt;b&gt;dartResult&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;&lt;b&gt;answer&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.3488%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.8605%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;1S2D*3T&lt;/td&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;37&lt;/td&gt;
&lt;td style=&quot;width: 50.3488%;&quot;&gt;11&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 + 22&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 + 33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.8605%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;1D2S#10S&lt;/td&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;width: 50.3488%;&quot;&gt;12&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 21&lt;span&gt;&amp;nbsp;&lt;/span&gt;* (-1) + 101&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.8605%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;1D2S0T&lt;/td&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 50.3488%;&quot;&gt;12&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 21&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.8605%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;1S*2T*3S&lt;/td&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;23&lt;/td&gt;
&lt;td style=&quot;width: 50.3488%;&quot;&gt;11&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 * 2 + 23&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 + 31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.8605%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;1D#2S*3S&lt;/td&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 50.3488%;&quot;&gt;12&lt;span&gt;&amp;nbsp;&lt;/span&gt;* (-1) * 2 + 21&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 + 31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.8605%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;1T2D3D#&lt;/td&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;-4&lt;/td&gt;
&lt;td style=&quot;width: 50.3488%;&quot;&gt;13&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 22&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 32&lt;span&gt;&amp;nbsp;&lt;/span&gt;* (-1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.8605%;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;1D2S3T*&lt;/td&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;59&lt;/td&gt;
&lt;td style=&quot;width: 50.3488%;&quot;&gt;12&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 21&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 + 33&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 하나씩 돌면서 number에 숫자 문자열을 더한다. 숫자가 10일 경우엔 문자열 하나로 해결되지 않기 때문이다. 그리고 S, D, T가 나왔다는 건 숫자가 다 끝났다는 이야기이므로 S, D, T가 나오면 number를 점수를 저장하는 score 배열에 추가한다. 점수에 제곱을 하거나 옵션 조건을 적용할 때는 배열의 -1, -2 인덱스를 사용해서 점수를 조정한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1622883996984&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(dartResult):
    score = []
    number = ''
    for d in dartResult:
    	# d가 숫자일 때
        if &quot;0&quot; &amp;lt;= d &amp;lt;= &quot;9&quot;:
        	# 숫자 10을 고려
            number += d
         
        # d가 S, D, T 중 하나일 때
        elif d in (&quot;S&quot;,&quot;D&quot;, &quot;T&quot;):
        	# S, D, T가 나왔다는 건 점수 문자열이 다 나왔다는 것
            # 점수 저장
            score.append(int(number))
            # number 초기화
            number = ''
            
            # 종류별 제곱
            if d == &quot;S&quot;:
                score[-1] **= 1
            elif d == &quot;D&quot;:
                score[-1] **= 2
            else:
                score[-1] **= 3
                
        # d가 *, # 중 하나일 때
        elif d in (&quot;*&quot;, &quot;#&quot;):
            if d == &quot;*&quot;:
                score[-1] *= 2
                # 아직 점수가 하나일 때
                if len(score) == 1:  
                    continue
                score[-2] *= 2
            else:
                score[-1] *= -1
    return sum(score)
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘/기타</category>
      <author>by cijbest</author>
      <guid isPermaLink="true">https://cijbest.tistory.com/82</guid>
      <comments>https://cijbest.tistory.com/82#entry82comment</comments>
      <pubDate>Sat, 5 Jun 2021 18:18:40 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 : PYTHON] 직사각형 별찍기</title>
      <link>https://cijbest.tistory.com/81</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.&lt;br /&gt;별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.&lt;/p&gt;
&lt;hr style=&quot;box-sizing: content-box; height: 0px; overflow: visible; margin: 1.5rem 0px; border-width: 0.0625rem 0px 0px; border-color: #172334; border-image: initial; border-style: solid initial initial initial;&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;제한 조건&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;n과 m은 각각 1000 이하인 자연수입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr style=&quot;box-sizing: content-box; height: 0px; overflow: visible; margin: 1.5rem 0px; border-width: 0.0625rem 0px 0px; border-color: #172334; border-image: initial; border-style: solid initial initial initial;&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 4.88968%; height: 35px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;5 3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 6.04651%; height: 58px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;*****&lt;/span&gt;&lt;br /&gt;&lt;span&gt;*****&lt;/span&gt;&lt;br /&gt;&lt;span&gt;*****&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1622883814559&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a, b = map(int, input().strip().split(' '))
print((a * '*' + '\n') * b) &lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘/기타</category>
      <author>by cijbest</author>
      <guid isPermaLink="true">https://cijbest.tistory.com/81</guid>
      <comments>https://cijbest.tistory.com/81#entry81comment</comments>
      <pubDate>Sat, 5 Jun 2021 18:03:40 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 : PYTHON] x만큼 간격이 있는 n개의 숫자</title>
      <link>https://cijbest.tistory.com/80</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;제한 조건&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;x는 -10000000 이상, 10000000 이하인 정수입니다.&lt;/li&gt;
&lt;li&gt;n은 1000 이하인 자연수입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;x&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;n&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;answer&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;[2,4,6,8,10]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;[4,8,12]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-4&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;[-4, -8]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1622883638229&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(x, n):
    answer = []
    
    for i in range(1, n+1):
        answer.append(x * i)
    
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/기타</category>
      <author>by cijbest</author>
      <guid isPermaLink="true">https://cijbest.tistory.com/80</guid>
      <comments>https://cijbest.tistory.com/80#entry80comment</comments>
      <pubDate>Sat, 5 Jun 2021 18:01:26 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 : PYTHON] 행렬의 덧셈</title>
      <link>https://cijbest.tistory.com/79</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;제한 조건&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;arr1&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;arr2&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;return&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[[1,2],[2,3]]&lt;/td&gt;
&lt;td&gt;[[3,4],[5,6]]&lt;/td&gt;
&lt;td&gt;[[4,6],[7,9]]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[[1],[2]]&lt;/td&gt;
&lt;td&gt;[[3],[4]]&lt;/td&gt;
&lt;td&gt;[[4],[6]]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음엔 zip()으로 풀고 싶었는데 zip 함수에 대한 이해가 완전하지 않아서 결국 for문 두개로 하나씩 탐색해 가면서 풀었다. '다른 사람 풀이'를 참고해서 풀면 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;arr1 =&amp;gt; [[1,2],[2,3]], arr2 =&amp;gt; [[3,4],[5,6]]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 zip : [ ( [1,2], [3,4] ), ( [2,3], [5,6] ) ]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 zip : [ ( (1, 3), (2, 4) ), ( (2, 5), (3, 6) ) ]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1622883230869&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(arr1, arr2):
    answer = []
    for i in range(len(arr1)):
        tmp = []
        for j in range(len(arr1[0])):
            tmp.append(arr1[i][j] + arr2[i][j])
        answer.append(tmp)
        
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;다른 사람 풀이&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1622883260896&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(A,B):
    answer = [[c + d for c, d in zip(a, b)] for a, b in zip(A,B)]
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/기타</category>
      <author>by cijbest</author>
      <guid isPermaLink="true">https://cijbest.tistory.com/79</guid>
      <comments>https://cijbest.tistory.com/79#entry79comment</comments>
      <pubDate>Sat, 5 Jun 2021 17:59:09 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 : PYTHON] 핸드폰 번호 가리기</title>
      <link>https://cijbest.tistory.com/78</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.&lt;br /&gt;전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부&lt;span&gt;&amp;nbsp;&lt;/span&gt;*으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;제한 조건&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;s는 길이 4 이상, 20이하인 문자열입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;phone_number&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;return&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;01033334444&quot;&lt;/td&gt;
&lt;td&gt;&quot;*******4444&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;027778888&quot;&lt;/td&gt;
&lt;td&gt;&quot;*****8888&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열.rjust()를 이용하여 풀었지만 '다른 사람 풀이' 처럼 '*'에 원하는 수만큼 곱해주어도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1622883005157&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(phone_number):
    
    answer = ''
    answer = answer.rjust(len(phone_number)-4, '*') + phone_number[-4:]
    
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;다른 사람 풀이&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1622883067417&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(phone_number):
    return &quot;*&quot;*(len(phone_number)-4) + phone_number[-4:]&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘/기타</category>
      <author>by cijbest</author>
      <guid isPermaLink="true">https://cijbest.tistory.com/78</guid>
      <comments>https://cijbest.tistory.com/78#entry78comment</comments>
      <pubDate>Sat, 5 Jun 2021 17:52:13 +0900</pubDate>
    </item>
  </channel>
</rss>