개발자 HOON
πŸ› HOON DEVLog
개발자 HOON
전체 방문자
였늘
μ–΄μ œ
  • 😎 전체 μΉ΄ν…Œκ³ λ¦¬ (137)
    • πŸ“ μ‹ μž… 인터뷰 μ€€λΉ„ (7)
    • πŸ¦” μ·¨μ—…μ€€λΉ„ 기둝 (7)
    • β˜• μžλ°” : JAVA (5)
    • 🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS (80)
    • 🌱 λ°±μ—”λ“œ : Backend (13)
    • πŸ§ͺ 컴퓨터과학 : CS (11)
    • πŸ—‚ λ°μ΄ν„°λ² μ΄μŠ€ : DB (1)
    • πŸƒ‍♂️ DEVLOG (8)
    • βš™οΈ Trouble Shooting (5)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • GitHub
  • Resume

곡지사항

인기 κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
개발자 HOON

πŸ› HOON DEVLog

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] ν–‰λ ¬ ν…Œλ‘λ¦¬ νšŒμ „ (level2, python)
🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] ν–‰λ ¬ ν…Œλ‘λ¦¬ νšŒμ „ (level2, python)

2022. 10. 13. 00:43

🏝 문제 μ„€λͺ…

 

rows x columns 크기인 행렬이 μžˆμŠ΅λ‹ˆλ‹€. ν–‰λ ¬μ—λŠ” 1λΆ€ν„° rows x columnsκΉŒμ§€μ˜ μˆ«μžκ°€ ν•œ 쀄씩 μˆœμ„œλŒ€λ‘œ μ ν˜€μžˆμŠ΅λ‹ˆλ‹€. 이 ν–‰λ ¬μ—μ„œ μ§μ‚¬κ°ν˜• λͺ¨μ–‘μ˜ λ²”μœ„λ₯Ό μ—¬λŸ¬ 번 선택해, ν…Œλ‘λ¦¬ 뢀뢄에 μžˆλŠ” μˆ«μžλ“€μ„ μ‹œκ³„λ°©ν–₯으둜 νšŒμ „μ‹œν‚€λ € ν•©λ‹ˆλ‹€. 각 νšŒμ „μ€ (x1, y1, x2, y2)인 μ •μˆ˜ 4개둜 ν‘œν˜„ν•˜λ©°, κ·Έ μ˜λ―ΈλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • x1 ν–‰ y1 μ—΄λΆ€ν„° x2 ν–‰ y2 μ—΄κΉŒμ§€μ˜ μ˜μ—­μ— ν•΄λ‹Ήν•˜λŠ” μ§μ‚¬κ°ν˜•μ—μ„œ ν…Œλ‘λ¦¬μ— μžˆλŠ” μˆ«μžλ“€μ„ ν•œ μΉΈμ”© μ‹œκ³„λ°©ν–₯으둜 νšŒμ „ν•©λ‹ˆλ‹€.

 

λ‹€μŒμ€ 6 x 6 크기 ν–‰λ ¬μ˜ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

 

이 행렬에 (2, 2, 5, 4) νšŒμ „μ„ μ μš©ν•˜λ©΄, μ•„λž˜ κ·Έλ¦Όκ³Ό 같이 2ν–‰ 2μ—΄λΆ€ν„° 5ν–‰ 4μ—΄κΉŒμ§€ μ˜μ—­μ˜ ν…Œλ‘λ¦¬κ°€ μ‹œκ³„λ°©ν–₯으둜 νšŒμ „ν•©λ‹ˆλ‹€. μ΄λ•Œ, μ€‘μ•™μ˜ 15와 21이 μžˆλŠ” μ˜μ—­μ€ νšŒμ „ν•˜μ§€ μ•ŠλŠ” 것을 μ£Όμ˜ν•˜μ„Έμš”.

 

 

ν–‰λ ¬μ˜ μ„Έλ‘œ 길이(ν–‰ 개수) rows, κ°€λ‘œ 길이(μ—΄ 개수) columns, 그리고 νšŒμ „λ“€μ˜ λͺ©λ‘ queriesκ°€ μ£Όμ–΄μ§ˆ λ•Œ, 각 νšŒμ „λ“€μ„ 배열에 μ μš©ν•œ λ’€, κ·Έ νšŒμ „μ— μ˜ν•΄ μœ„μΉ˜κ°€ 바뀐 μˆ«μžλ“€ 쀑 κ°€μž₯ μž‘μ€ μˆ«μžλ“€μ„ μˆœμ„œλŒ€λ‘œ 배열에 λ‹΄μ•„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.


μ œν•œμ‚¬ν•­
  • rowsλŠ” 2 이상 100 μ΄ν•˜μΈ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • columnsλŠ” 2 이상 100 μ΄ν•˜μΈ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • μ²˜μŒμ— ν–‰λ ¬μ—λŠ” κ°€λ‘œ λ°©ν–₯으둜 μˆ«μžκ°€ 1λΆ€ν„° ν•˜λ‚˜μ”© μ¦κ°€ν•˜λ©΄μ„œ μ ν˜€μžˆμŠ΅λ‹ˆλ‹€.
    • 즉, 아무 νšŒμ „λ„ ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ, i ν–‰ j 열에 μžˆλŠ” μˆ«μžλŠ” ((i-1) x columns + j)μž…λ‹ˆλ‹€.
  • queries의 ν–‰μ˜ 개수(νšŒμ „μ˜ 개수)λŠ” 1 이상 10,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • queries의 각 행은 4개의 μ •μˆ˜ [x1, y1, x2, y2]μž…λ‹ˆλ‹€.
    • x1 ν–‰ y1 μ—΄λΆ€ν„° x2 ν–‰ y2 μ—΄κΉŒμ§€ μ˜μ—­μ˜ ν…Œλ‘λ¦¬λ₯Ό μ‹œκ³„λ°©ν–₯으둜 νšŒμ „ν•œλ‹€λŠ” λœ»μž…λ‹ˆλ‹€.
    • 1 ≤ x1 < x2 ≤ rows, 1 ≤ y1 < y2 ≤ columnsμž…λ‹ˆλ‹€.
    • λͺ¨λ“  νšŒμ „μ€ μˆœμ„œλŒ€λ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, 두 번째 νšŒμ „μ— λŒ€ν•œ 닡은 첫 번째 νšŒμ „μ„ μ‹€ν–‰ν•œ λ‹€μŒ, κ·Έ μƒνƒœμ—μ„œ 두 번째 νšŒμ „μ„ μ‹€ν–‰ν–ˆμ„ λ•Œ μ΄λ™ν•œ 숫자 쀑 μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λ©΄ λ©λ‹ˆλ‹€.

μž…μΆœλ ₯ μ˜ˆμ‹œ
6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25]
3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]
100 97 [[1,1,100,97]] [1]

μž…μΆœλ ₯ 예 μ„€λͺ…

 

μž…μΆœλ ₯ 예 #1

  • νšŒμ „μ„ μˆ˜ν–‰ν•˜λŠ” 과정을 그림으둜 ν‘œν˜„ν•˜λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예 #2

  • νšŒμ „μ„ μˆ˜ν–‰ν•˜λŠ” 과정을 그림으둜 ν‘œν˜„ν•˜λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예 #3

  • 이 μ˜ˆμ‹œμ—μ„œλŠ” ν–‰λ ¬μ˜ ν…Œλ‘λ¦¬μ— μœ„μΉ˜ν•œ λͺ¨λ“  칸듀이 μ›€μ§μž…λ‹ˆλ‹€. λ”°λΌμ„œ, ν–‰λ ¬μ˜ ν…Œλ‘λ¦¬μ— μžˆλŠ” 수 쀑 κ°€μž₯ μž‘μ€ 숫자인 1이 λ°”λ‘œ 닡이 λ©λ‹ˆλ‹€.

 

🏝 풀이 μ½”λ“œ

import heapq

def solution(rows, columns, queries):
    answer = [[columns*j+i+1 for i in range(columns)] for j in range(rows)]
    retval = []
    
    for query in queries:
        a, b, c, d = query
        copied = [item[:] for item in answer]
        heap = []
        
        for i in range(b, d):
            answer[a-1][i] = copied[a-1][i-1]
            heapq.heappush(heap, copied[a-1][i-1])
            
        for j in range(a, c):
            answer[j][d-1] = copied[j-1][d-1]
            heapq.heappush(heap, copied[j-1][d-1])

        for k in range(d-2, b-2, -1):
            answer[c-1][k] = copied[c-1][k+1]
            heapq.heappush(heap, copied[c-1][k+1])
        
        for m in range(c-2, a-2, -1):
            answer[m][b-1] = copied[m+1][b-1]
            heapq.heappush(heap, copied[m+1][b-1])
            
        retval.append(heapq.heappop(heap))
        
    return retval

 

브루트포슀 / κ΅¬ν˜„ λ¬Έμ œμ΄λ‹€.

μ„€λ§ˆ..? ν–ˆμ§€λ§Œ μ§„μ§œ ν–‰λ ¬ ν…Œλ‘λ¦¬λ§Œ νšŒμ „ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•˜λ©΄ λœλ‹€.

쿼리가 10,000κ°œμž„μ—λ„, μ‹œκ°„ μ΄ˆκ³ΌλŠ” λ‚˜μ§€ μ•Šμ•˜λ‹€.

 

ν–‰κ³Ό 열이 μ΅œλŒ€ 100μ΄λ―€λ‘œ, 제일 큰 ν…Œλ‘λ¦¬κ°€ νšŒμ „ν•˜λ©΄ μš”μ†Œμ˜ 이동이 μ΅œλŒ€ μ•½ 400번, νž™ ꡬ성과 λ°°μ—΄ μΉ΄ν”Όλ₯Ό κ³ λ €ν•˜κ³  쿼리가 10,000번 λŒλ”λΌλ„ 1μ–΅λ²ˆμ˜ μ—°μ‚°μ—λŠ” λͺ» λ―ΈμΉ  κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜μ—ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

 

μ€‘μš”ν•œ 점은, copyλ₯Ό ν•  λ•Œ deepcopyλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•˜λ‹€.

νŒŒμ΄μ¬μ—μ„œ deepcopyλŠ” μŠ¬λΌμ΄μ‹±μ„ ν™œμš©ν•œ κΉŠμ€ 볡사보닀 훨씬 느리기 λ•Œλ¬Έμ— κΌ­ ν•„μš”ν•œ κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.

 

iλŠ” μœ„μͺ½ ν…Œλ‘λ¦¬μ˜ 였λ₯Έμͺ½ 이동, jλŠ” 였λ₯Έμͺ½ ν…Œλ‘λ¦¬μ˜ μ•„λž˜ 이동, kλŠ” μ•„λž˜μͺ½ ν…Œλ‘λ¦¬μ˜ μ™Όμͺ½ 이동, m은 μ™Όμͺ½ ν…Œλ‘λ¦¬μ˜ μœ„μͺ½ 이동을 λ‚˜νƒ€λ‚Έ λ°˜λ³΅λ¬Έμ΄λ‹€. ν•„μš”ν•œ μ‚¬λžŒμ€ μ°Έκ³ ν•˜κΈΈ λ°”λž€λ‹€.

 

κ²°κ΅­ λ°˜ν™˜ν•΄μ•Ό ν•˜λŠ” 값은 νšŒμ „ν•œ ν…Œλ‘λ¦¬μ˜ μ΅œμ†Ÿκ°’μ΄λ‹€. 값을 μ΄λ™μ‹œν‚€λŠ” κ³Όμ •μ—μ„œ ν•΄λ‹Ή 값을 μ΅œμ†Œ νž™μ— μ§‘μ–΄λ„£κ³ , ν•œ 쿼리에 λŒ€ν•œ κ²°κ³Όλ₯Ό νž™μ˜ pop을 μ΄μš©ν•΄ κ΅¬μ„±ν•˜λ©΄ μ‹œκ°„λ³΅μž‘λ„λ₯Ό λ”μš± 쀄일 수 μžˆλ‹€.

 

 

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ 동일쑰건 (μƒˆμ°½μ—΄λ¦Ό)

'🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] κ°€μž₯ λ¨Ό λ…Έλ“œ (level3, python)  (0) 2022.10.13
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 방금그곑 (level2, python)  (1) 2022.10.13
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] κ΄„ν˜Έ λ³€ν™˜ (level2, python)  (0) 2022.10.11
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 맀뉴 리뉴얼 (level2, python)  (0) 2022.10.10
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 보석 μ‡Όν•‘ (level3, python)  (0) 2022.10.10
    '🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] κ°€μž₯ λ¨Ό λ…Έλ“œ (level3, python)
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 방금그곑 (level2, python)
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] κ΄„ν˜Έ λ³€ν™˜ (level2, python)
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 맀뉴 리뉴얼 (level2, python)
    개발자 HOON
    개발자 HOON
    쒋은 λ°±μ—”λ“œ μ—”μ§€λ‹ˆμ–΄κ°€ 되기 μœ„ν•œ 기둝을 λͺ¨μ•˜μŠ΅λ‹ˆλ‹€. # μ£Όλ‹ˆμ–΄ # λ°±μ—”λ“œ # 개발자

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”