Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

22-janghw0126 #91

Merged
merged 7 commits into from
Mar 14, 2024
Merged

22-janghw0126 #91

merged 7 commits into from
Mar 14, 2024

Conversation

janghw0126
Copy link
Member

@janghw0126 janghw0126 commented Mar 8, 2024

πŸ”— 문제 링크

λ°±μ€€ | μ’…μ΄μ˜ 개수

문제 μ„€λͺ…

NΓ—N크기의 ν–‰λ ¬λ‘œ ν‘œν˜„λ˜λŠ” 쒅이가 μžˆλ‹€. μ’…μ΄μ˜ 각 μΉΈμ—λŠ” -1, 0, 1 쀑 ν•˜λ‚˜κ°€ μ €μž₯λ˜μ–΄ μžˆλ‹€. μš°λ¦¬λŠ” 이 행렬을 λ‹€μŒκ³Ό 같은 κ·œμΉ™μ— 따라 μ μ ˆν•œ 크기둜 자λ₯΄λ €κ³  ν•œλ‹€.

  1. λ§Œμ•½ 쒅이가 λͺ¨λ‘ 같은 수둜 λ˜μ–΄ μžˆλ‹€λ©΄ 이 쒅이λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•œλ‹€.
  2. (1)이 μ•„λ‹Œ κ²½μš°μ—λŠ” 쒅이λ₯Ό 같은 크기의 쒅이 9개둜 자λ₯΄κ³ , 각각의 잘린 쒅이에 λŒ€ν•΄μ„œ (1)의 과정을 λ°˜λ³΅ν•œλ‹€.

이와 같이 쒅이λ₯Ό μž˜λžμ„ λ•Œ, -1둜만 μ±„μ›Œμ§„ μ’…μ΄μ˜ 개수, 0으둜만 μ±„μ›Œμ§„ μ’…μ΄μ˜ 개수, 1둜만 μ±„μ›Œμ§„ μ’…μ΄μ˜ 개수λ₯Ό κ΅¬ν•΄λ‚΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€

μž…λ ₯

  • 첫째 쀄에 N($1 ≀ N ≀ 37$, N은 3k κΌ΄)이 주어진닀.
  • λ‹€μŒ N개의 μ€„μ—λŠ” N개의 μ •μˆ˜λ‘œ 행렬이 주어진닀.

좜λ ₯

  • 첫째 쀄에 -1둜만 μ±„μ›Œμ§„ μ’…μ΄μ˜ 개수λ₯Ό, λ‘˜μ§Έ 쀄에 0으둜만 μ±„μ›Œμ§„ μ’…μ΄μ˜ 개수λ₯Ό, μ…‹μ§Έ 쀄에 1둜만 μ±„μ›Œμ§„ μ’…μ΄μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.

βœ”οΈ μ†Œμš”λœ μ‹œκ°„

4μ‹œκ°„ + @

✨ μˆ˜λ„ μ½”λ“œ

βœ…μ΄ λ¬Έμ œλŠ” λΆ„ν•  정볡 μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œμ΄λ‹€. μž¬κ·€κ°€ λ‚˜ν•œν…Œ λ‚˜λ¦„ μ΅μˆ™ν•΄μ‘Œλ‹€κ³  μƒκ°ν–ˆμ§€λ§Œ, λ³΅μž‘ν•œ λ‘œμ§μ„ μž¬κ·€λ‘œ ν’€μ–΄λ³΄λŠ” 문제라 μ‹œκ°„μ΄ κ½€ 많이 걸렸던 것 κ°™λ‹€. 쑰금 더 λΆ„λ°œν•΄μ•Όκ² λ‹€λŠ” 생각을 ν•˜μ˜€λ‹€πŸ˜…πŸ₯ΉπŸ₯Ή

이 문제의 핡심 뢀뢄은 λΆ„ν•  정볡 ν•¨μˆ˜μ΄λ‹€. ν•΄λ‹Ή ν•¨μˆ˜μ—μ„œ 받은 x와 y값을 matrix에 λŒ€μž…ν•œ 값을 λ°˜λ³΅λ¬Έμ„ 톡해 λͺ¨λ“  matrix와 λΉ„κ΅ν•˜κ³  κ·ΈλŸ¬λŠ” κ³Όμ • 쀑에 1κ°œλΌλ„ λ‹€λ₯Έ 값이 λ°œμƒν•œλ‹€λ©΄, λΆ„ν•  정볡을 μ‹œν–‰ν•œλ‹€. μ΄λ•Œ, 9개의 κ΅¬κ°„μœΌλ‘œ λ‚˜λˆ μ§€κΈ° λ•Œλ¬Έμ— μž…λ ₯ 크기 N은 3으둜 λ‚˜λˆˆ λͺ«μœΌλ‘œ μ€„μ–΄λ“€κ²Œ 되며(λ¬Έμ œμ—μ„œ N은 3k 꼴둜 μ£Όμ–΄μ‘ŒκΈ° λ•Œλ¬Έμ—), 각각의 μ’Œν‘œλŠ” 이 N의 값을 μ μ ˆν•˜κ²Œ λ”ν•΄μ„œ λ§Œλ“€κ²Œ λœλ‹€.

제λͺ©μ„ μž…λ ₯ν•΄μ£Όμ„Έμš”_-001

πŸ’‘ν˜„μž¬μ˜ 쒅이 색상과 λ‹€λ₯Ό λ•Œ λΆ„ν• ν•˜λŠ” λΆ€λΆ„

# λΆ„ν•  정볡을 μ‹œμž‘ν•œλ‹€.
def divide(x,y,n):
    # ν˜„μž¬ κ΅¬κ°„μ˜ 색깔을 μ €μž₯ν•œλ‹€.
    color=matrix[x][y]
    # ν˜„μž¬ ꡬ간 λ‚΄μ˜ λͺ¨λ“  μ •μˆ˜λ“€μ„ λ°˜λ³΅ν•˜λ©΄μ„œ 색깔이 같은지 ν™•μΈν•œλ‹€.
    for i in range(x,x+n):
        for j in range(y,y+n):
            # 색깔이 λ‹€λ₯Έ 경우 ꡬ간을 9개둜 λ‚˜λˆ„μ–΄ μž¬κ·€μ μœΌλ‘œ divide ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€.
            if color != matrix[i][j]:
                # 9κ΅¬κ°„μœΌλ‘œ λ‚˜λˆ„κΈ° μœ„ν•΄ a와 bλ₯Ό 0λΆ€ν„° 2κΉŒμ§€ λ°˜λ³΅ν•œλ‹€.
                for a in range(3):
                    for b in range(3):
                        # ν˜„μž¬ ꡬ간을 9개의 μž‘μ€ κ΅¬κ°„μœΌλ‘œ λΆ„ν• ν•˜κΈ° μœ„ν•΄ divide ν•¨μˆ˜λ₯Ό μž¬κ·€ ν˜ΈμΆœν•œλ‹€.
                        divide(x+(n//3)*a,y+(n//3)*b,n//3)
                return
    # 색깔에 λ”°λΌμ„œ 갯수λ₯Ό μΆ”κ°€ν•΄μ€€λ‹€.
    if color==1:
        cnt.append(1)
    elif color==-1:
        cnt.append(-1)
    else:
        cnt.append(0)

Note

λ‘œμ§μ„ 더 μžμ„Έν•˜κ²Œ μ„€λͺ…ν•˜λ©΄,
N이 9일 λ•Œ (0,0), (0,3), (0,6), (3,0), (3,3), (3,6), (6,0), (6,3), (6,6)으둜 λΆ„ν• λœλ‹€. κ·ΈλŸ¬λ‹ˆκΉŒ N을 3으둜 λ‚˜λˆˆ λͺ«μ„ x와 yμ’Œν‘œμ—
(0,1,2)λ₯Ό κ³±ν•΄μ€€ 값을 더해주면 λœλ‹€.


πŸ“–ν’€μ΄ 방법

  1. μž¬κ·€λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ΅œλŒ€ 깊이λ₯Ό μ„€μ •ν•΄μ€€λ‹€.
  2. Nκ³Ό N개의 μ •μˆ˜λ“€μ„ ν–‰λ ¬λ‘œ μž…λ ₯ λ°›κ³ , μ’…μ΄μ˜ 갯수λ₯Ό μ €μž₯ν•˜λŠ” 리슀트λ₯Ό μ΄ˆκΈ°ν™”ν•œλ‹€.
  3. λΆ„ν•  정볡을 μ‹œμž‘ν•œλ‹€.
  4. ν˜„μž¬ κ΅¬κ°„μ˜ 색깔을 μ €μž₯ν•˜κ³ , ν˜„μž¬ ꡬ간 λ‚΄μ˜ λͺ¨λ“  μ •μˆ˜λ“€μ„ λ°˜λ³΅ν•˜λ©΄μ„œ 색깔이 같은지 ν™•μΈν•œλ‹€.
  5. 색깔이 λ‹€λ₯Έ 경우 ꡬ간을 9개둜 λ‚˜λˆ„μ–΄ μž¬κ·€μ μœΌλ‘œ divide ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€.
  6. 9κ΅¬κ°„μœΌλ‘œ λ‚˜λˆ„κΈ° μœ„ν•΄ a와 bλ₯Ό 0λΆ€ν„° 2κΉŒμ§€ λ°˜λ³΅ν•œλ‹€.
  7. ν˜„μž¬ ꡬ간을 9개의 μž‘μ€ κ΅¬κ°„μœΌλ‘œ λΆ„ν• ν•˜κΈ° μœ„ν•΄ divide ν•¨μˆ˜λ₯Ό μž¬κ·€ ν˜ΈμΆœν•œλ‹€.
  8. 색깔에 λ”°λΌμ„œ 갯수λ₯Ό μΆ”κ°€ν•΄μ€€λ‹€.
  9. μ’…μ΄μ˜ 갯수λ₯Ό 좜λ ₯ν•œλ‹€.

β¬‡οΈμ΅œμ’… μ½”λ“œ

import sys
input= sys.stdin.readline
# μž¬κ·€λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ΅œλŒ€ 깊이λ₯Ό μ„€μ •ν•΄μ€€λ‹€.
sys.setrecursionlimit(1000)

# N을 μž…λ ₯λ°›λŠ”λ‹€.
n=int(input())

# N개의 μ •μˆ˜λ“€μ„ ν–‰λ ¬λ‘œ μž…λ ₯λ°›λŠ”λ‹€.
matrix=[list(map(int,input().split())) for _ in range(n)]

# μ’…μ΄μ˜ 갯수λ₯Ό μ €μž₯ν•˜λŠ” 리슀트λ₯Ό μ΄ˆκΈ°ν™”ν•œλ‹€.
cnt=[]

# λΆ„ν•  정볡을 μ‹œμž‘ν•œλ‹€.
def divide(x,y,n):
    # ν˜„μž¬ κ΅¬κ°„μ˜ 색깔을 μ €μž₯ν•œλ‹€.
    color=matrix[x][y]
    # ν˜„μž¬ ꡬ간 λ‚΄μ˜ λͺ¨λ“  μ •μˆ˜λ“€μ„ λ°˜λ³΅ν•˜λ©΄μ„œ 색깔이 같은지 ν™•μΈν•œλ‹€.
    for i in range(x,x+n):
        for j in range(y,y+n):
            # 색깔이 λ‹€λ₯Έ 경우 ꡬ간을 9개둜 λ‚˜λˆ„μ–΄ μž¬κ·€μ μœΌλ‘œ divide ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€.
            if color != matrix[i][j]:
                # 9κ΅¬κ°„μœΌλ‘œ λ‚˜λˆ„κΈ° μœ„ν•΄ a와 bλ₯Ό 0λΆ€ν„° 2κΉŒμ§€ λ°˜λ³΅ν•œλ‹€.
                for a in range(3):
                    for b in range(3):
                        # ν˜„μž¬ ꡬ간을 9개의 μž‘μ€ κ΅¬κ°„μœΌλ‘œ λΆ„ν• ν•˜κΈ° μœ„ν•΄ divide ν•¨μˆ˜λ₯Ό μž¬κ·€ ν˜ΈμΆœν•œλ‹€.
                        divide(x+(n//3)*a,y+(n//3)*b,n//3)
                return
    # 색깔에 λ”°λΌμ„œ 갯수λ₯Ό μΆ”κ°€ν•΄μ€€λ‹€.
    if color==1:
        cnt.append(1)
    elif color==-1:
        cnt.append(-1)
    else:
        cnt.append(0)

divide(0,0,n)
# μ’…μ΄μ˜ 갯수λ₯Ό 좜λ ₯ν•œλ‹€.
print(cnt.count(-1),cnt.count(0),cnt.count(1),sep="\n")

πŸ“š μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©

μž¬κ·€κ°€ μ΅μˆ™ν•΄μ‘Œλ‹€κ³  μƒκ°ν–ˆμ§€λ§Œ, λ³΅μž‘ν•˜κ³  μ–΄λ €μš΄ λ‘œμ§μ„ ν•΄κ²°ν•˜κΈ°μ—λŠ” 아직 역뢀쑱인 것 κ°™λ‹€. μ°¨κ·Όμ°¨κ·Ό κΉ¨μ„œ λ‚˜μ€‘μ— μ–΄λ €μš΄ λ‘œμ§λ“€μ„ λ§ˆμ£Όν–ˆμ„ λ•Œ 아무렇지 μ•Šκ²Œ ν’€ 수 μžˆλŠ” λ‚ κΉŒμ§€ λ…Έλ ₯ν•΄λ³΄κ² λ‹€πŸ‘ŠπŸ‘Š
μ°Έκ³ ν•œ λΈ”λ‘œκ·Έ

Comment on lines +16 to +29
def divide(x,y,n):
# ν˜„μž¬ κ΅¬κ°„μ˜ 색깔을 μ €μž₯ν•œλ‹€.
color=matrix[x][y]
# ν˜„μž¬ ꡬ간 λ‚΄μ˜ λͺ¨λ“  μ •μˆ˜λ“€μ„ λ°˜λ³΅ν•˜λ©΄μ„œ 색깔이 같은지 ν™•μΈν•œλ‹€.
for i in range(x,x+n):
for j in range(y,y+n):
# 색깔이 λ‹€λ₯Έ 경우 ꡬ간을 9개둜 λ‚˜λˆ„μ–΄ μž¬κ·€μ μœΌλ‘œ divide ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€.
if color != matrix[i][j]:
# 9κ΅¬κ°„μœΌλ‘œ λ‚˜λˆ„κΈ° μœ„ν•΄ a와 bλ₯Ό 0λΆ€ν„° 2κΉŒμ§€ λ°˜λ³΅ν•œλ‹€.
for a in range(3):
for b in range(3):
# ν˜„μž¬ ꡬ간을 9개의 μž‘μ€ κ΅¬κ°„μœΌλ‘œ λΆ„ν• ν•˜κΈ° μœ„ν•΄ divide ν•¨μˆ˜λ₯Ό μž¬κ·€ ν˜ΈμΆœν•œλ‹€.
divide(x+(n//3)*a,y+(n//3)*b,n//3)
return
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ν—‰ μ €λŠ” Index λ₯Ό λ‚˜λˆ„κ³  λͺ«κ³Ό λ‚˜λ¨Έμ§€λ₯Ό κ³„μ‚°ν•΄μ„œ 쒅이 μœ„μΉ˜λ₯Ό κ΅¬ν•˜λ©΄μ„œ 아이디어 μ°ΎλŠ”λ° 였래 κ±Έλ Έμ—ˆλŠ”λ°
2쀑 For문으둜 9λ²ˆμ„ μž¬κ·€ ν˜ΈμΆœν•˜λ„λ‘ κ΅¬ν˜„μ„ ν•˜μ…¨κ΅°μš” !
μƒˆλ‘œμš΄ μ½”λ“œλ₯Ό ν•˜λ‚˜ 더 λ°°μ›Œκ°‘λ‹ˆλ‹€ !!
λΆ„ν•  정볡 μ–΄λ ΅λ„€μš” 😭😭😭 κ³ μƒν•˜μ…¨μŠ΅λ‹ˆλ‹€ !!

# row와 colλ₯Ό 3λ“±λΆ„ν•˜μ—¬ 총 9λ“±λΆ„
d = size // 3

# 0, 1, 2 쀑 κ°€λ‘œ, μ„Έλ‘œλ‘œ λͺ‡λ²ˆμ§Έ μΉΈ λͺ‡λ²ˆμ§Έ μœ„μΉ˜μ— μžˆλŠ”μ§€ 계산 
for k in range(3): 
   # 81 -> 9 -> 1 ... 순으둜 9면으둜 λΆ„ν• ν•œ λ’€ 각각 탐색
    search(r + (d*k), c , d)
    search(r + (d*k), c + d, d)
    search(r + (d*k), c + (2 * d), d)
return

Copy link
Collaborator

@Hwangyerin Hwangyerin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

μ €λ²ˆμ— μ •μ€λ‹˜μ΄ ν’€ λ•Œλ„ 봀던 λ¬Έμ œμ§€λ§Œ 또 μƒˆλ‘­λ„€μš”..(이러면 μ•ˆλ˜λŠ”λ°,,)
이 λ¬Έμ œλŠ” 저도 λ‹€μ‹œ μž¬κ·€λ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ 풀어봐야할 것 κ°™μŠ΅λ‹ˆλ‹€.
뢄할정볡. μ‰½μ§€μ•Šλ„€μš”πŸ₯²
22μ°¨μ‹œλ„ μˆ˜κ³ ν•˜μ…¨μŠ΅λ‹ˆλ‹€ :)

Copy link
Member

@avocado-13 avocado-13 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 μ˜ˆλ¦°λ‹˜κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ.... μƒˆλ‘­μŠ΅λ‹ˆλ‹€..... β—‹|οΏ£|_
2쀑 for문으둜 9등뢄을 μ €λ ‡κ²Œλ„ ν•  수 μžˆκ΅°μš”!
λΆ„ν•  정볡 정말 μˆ˜κ³ ν•˜μ…¨μŠ΅λ‹ˆλ‹ΉπŸ’žπŸ’ž

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants