카카오_해커랭크_easy 30p_Cavity Map_구현

RostoryT·2022년 7월 13일
0



메모한 것

목표 : 구멍을 X로 매꾼다
- 이때 구멍은 상하좌우보다 작은 값인 것
- 가장 사이드쪽에(테두리) 있는 값은 작아도 상관없음 = 구멍이 아니고 일종의 절벽? 내리막길? 이런느낌인듯

알고리즘

for문 두개 돌릴 때 [0]이랑 [-1] 부분 제외하고 풀서치
[방법 a] arr에 {상하좌우 a_ij} 다 넣고, if a_ij == max(arr)이면 구멍임 <-- 상하좌우 aij가 전부 1이면(같은깊이면) 답이안나옴
[방법 b] arr에 {상하좌우}만 넣고, if a_ij > max(arr)이면 구멍임 <-- 이거로가자

구멍을 -1로 만들고
마지막에 -1을 'X'로 바꾸는 작업을 해야할듯?


메모

  • 10p짜리 말고 30p짜리 해보자고 한게 약 한시간정도 걸린듯..
  • 어떻게 구현할지는 쉽게 나와서 10분? 15분만에 구현했는데
  • 히든 테케에서 너무 애먹었다...
    - 첨에 16개 못풀었다
    -> 아래 실패코드 1번
    -> visit[ ][ ] 추가 (이웃이 연속해서 구멍일 경우가 있어서 graph를 바꿔버리면 비교가 안되는 문제가 있었음)
    - 그랬더니 13개 못풀었다고 뜸
    -> 이웃도 연속해서 하겠다고 짠게 하나만 바껴있었음
graph = [[1, 1, 1, 2], [1, -1, -1, 2], [1, 8, -1, 2], [1, 2, 3, 4]]
for i in range(len(graph)):
    if -1 in graph[i]:
        graph[i][graph[i].index(-1)] = 'X'
print(graph)

graph = [[1, 1, 1, 2], [1, -1, -1, 2], [1, 8, -1, 2], [1, 2, 3, 4]]
for i in range(len(graph)):
    for j in range(len(graph)):
        if -1 == graph[i][j]:
            graph[i][j] = 'X'
print(graph)

  • 10개 이렇게 줄이다가 결국 다 맞음

실패코드 1번 : 실행용

  • 맨 처음에 히든 테케 16개 틀린거
def cavityMap(n, grid):
    graph = []
    for i in grid:
        graph.append(list(map(int,i)))
    
    for y in range(1, n-1):
        for x in range(1, n-1):
            friend = [graph[y-1][x], graph[y+1][x], graph[y][x-1], graph[y][x+1]]
            if graph[y][x] > max(friend):
                graph[y][x] = -1
                
    for i in range(len(graph)):
        if -1 in graph[i]:
            graph[i][graph[i].index(-1)] = 'X'
    
    ans = []
    for i in graph:
        ans.append("".join(map(str,i)))
    return ans

        
n = 4    
grid = ['1112', '1912', '1892', '1234']    
result = cavityMap(n, grid)
print("\n".join(result))


솔루션 코드 : 실행용

def cavityMap(n, grid):
    graph = []
    visit = [[0] * n for _ in range(n)]
    
    for i in grid:
        graph.append(list(map(int,i)))
    
    for y in range(1, n-1):
        for x in range(1, n-1):
            friend = [graph[y-1][x], graph[y+1][x], graph[y][x-1], graph[y][x+1]]
            if graph[y][x] > max(friend):
                visit[y][x] = -1
                
    for i in range(n):
        for j in range(n):
            if -1 == visit[i][j]:
                graph[i][j] = 'X'
    
    ans = []
    for i in graph:
        ans.append("".join(map(str,i)))
    return ans

        
n = 4    
grid = ['1112', '1912', '1892', '1234']    
result = cavityMap(n, grid)
print("\n".join(result))


솔루션 코드 : 제출용

#!/bin/python3

import math
import os
import random
import re
import sys

#
# Complete the 'cavityMap' function below.
#
# The function is expected to return a STRING_ARRAY.
# The function accepts STRING_ARRAY grid as parameter.
#

def cavityMap(n, grid):
    graph = []
    visit = [[0] * n for _ in range(n)]
    
    for i in grid:
        graph.append(list(map(int,i)))
    
    for y in range(1, n-1):
        for x in range(1, n-1):
            friend = [graph[y-1][x], graph[y+1][x], graph[y][x-1], graph[y][x+1]]
            if graph[y][x] > max(friend):
                visit[y][x] = -1
                
    for i in range(n):
        for j in range(n):
            if -1 == visit[i][j]:
                graph[i][j] = 'X'
    
    ans = []
    for i in graph:
        ans.append("".join(map(str,i)))
    return ans

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n = int(input().strip())

    grid = []

    for _ in range(n):
        grid_item = input()
        grid.append(grid_item)

    result = cavityMap(n, grid)

    fptr.write('\n'.join(result))
    fptr.write('\n')

    fptr.close()

profile
Do My Best

0개의 댓글