JLOG

[Python] 코드업 2610 : 그림판 채우기 본문

Algorithm/알고리즘 풀이

[Python] 코드업 2610 : 그림판 채우기

정정선선 2020. 5. 26. 10:32

https://codeup.kr/problem.php?id=2610

 

그림판 채우기

$10*10$ 크기의 그림이 있다. 이 그림에 그림판 색 채우기 기능을 구현하시오. (단, 원점은 왼쪽 위 끝이고, $x$ 값은 오른쪽, $y$ 값은 아래로 갈수록 증가한다.)

codeup.kr

 

10*10 크기의 그림에 그림판 색 채우기 기능을 구현하라

(단, 원점은 왼쪽 위 끝이고, xx 값은 오른쪽, yy 값은 아래로 갈수록 증가한다.)

 

입력

101010∗10 크기의 그림과 색칠할 좌표의 x,y 값이 차례로 입력된다.

 

출력

색 채우기를 한 결과를 출력한다.

 

# Code up #2610 : 그림판 채우기
# https://codeup.kr/problem.php?id=2610

paint = []

for i in range(10) : #{
    paint.append(list(input()))
#}
y, x = list(map(int, input().split(" ")))


'''
#FOR TESTING
str_paint = ['__________',
         '_____****_',
         '_____*__*_',
         '__*******_',
         '__*__*_**_',
         '__*__****_',
         '__*____*__',
         '__*____*__',
         '__******__',
         '__________']

paint = []

for p in str_paint :
    paint.append(list(p))
x, y = [4,4]
'''

# 해당 위치가 채워져 있는지 확인하고 채워주는 함수
def check(x, y) : #{
    global paint

    if paint[x][y] == '_' :
        paint[x][y] = "*"
        return 1
    else : return 0  
#}

# 상하좌우로 이동하면서 채워야 하는지 확인하는 함수
# 만약 채워야하면 그 좌표에서 다시 확인하도록 fill_paint를 return
def go_left(x, y) : #{
    x = x-1
    print("go_left")
    print(x,y)    
    if check(x,y) == 1 :return fill_paint(x,y)
#}

def go_right(x, y) : #{
    x = x+1
    print("go_right")
    print(x,y)
    if check(x,y) == 1 :return fill_paint(x,y)        
#}

def go_up(x, y) : #{
    y = y-1
    print("go_up")
    print(x,y)
    if check(x,y) == 1 :return fill_paint(x,y)     
#}

def go_down(x, y) : #{
    y = y+1
    print("go_down")
    print(x,y)
    if check(x,y) == 1 : return fill_paint(x,y)      
#}

# 좌표를 받으면 좌표에서부터 상하좌우로 채워야 하는지 확인하는 함수
def fill_paint(x, y) : #{
    if x > 0 : go_left(x, y)
    if x < 9 : go_right(x, y) 
    if y > 0 : go_up(x, y)
    if y < 9 : go_down(x, y)
#}

# 맨 처음 좌표가 채워져 있을 때는 함수를 실행하지 않음
if check(x,y) == 1 : fill_paint(x, y)


# string 형식으로 print 하기 위해 list를 string으로 변환
str_paint = []
for p in paint : #{
    str_paint.append("".join(p))
#}

print("\n".join(str_paint))

 

주의

해당 좌표는 0,0 부터 시작한다.

즉, 3, 5이면 네번째줄의 여섯번째 위치이다.

 

 

list 인덱싱으로 해당 위치를 가져오려면 list[y][x] 형식으로 입력되여야한다.

그래서, 입력시에 x,y를 거꾸로 입력 받아서 list[x][y] 형식으로 사용했다

 

 

string 자체를 인덱싱으로 값을 변환할 수 없어서 모두 list 형식으로 변환 후 다시 string 형식으로 변환했다.

Comments