본문 바로가기
Programming language/Python

COS Pro 1급 기출문제 - 꽃피우기

by jino22 2023. 10. 28.

틀린 부분이 있다면 언제든지 댓글 남겨주세요! 


할 때마다 모르겠는 DFS BFS

BFS 방식으로 풀어보려고 했다. 반복문 범벅이라 효율적인진 잘 모르겠지만 ㅠ

 

https://school.programmers.co.kr/learn/courses/11133/lessons/71165

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


구현 방식

1. 먼저 입력으로 주어진 밭에서 1의 위치를 찾아 one 리스트에 저장

2. 모든 위치의 꽃을 피울 때까지 (count로 확인, BFS 알고리즘에서 자주 사용하는 visited를 안 쓰고 모든 위치를 갔는 지 확인하려고 사용함) 네 방향으로 새로 꽃을 피우고 위치 저장

 

생각해야 할 부분

-  3번으로 표시한 부분 코드를 처음에 안 넣었었음. garden의 값을 실제로 바꾸지 않아도 횟수는 카운팅 되니까 괜찮을 줄 알았는데 그러면 중복 파악이 안 되어 무한루프로 들어감.

- 처음에 one, two 리스트를 하나의 변수에서 넣고 빼고 했더니 같은 날 번식(?)해야하는 데 새로운 위치들이 쌓이면서 밀려버림. 그래서 (오늘 새로 번식한 위치 = two)로 따로 만들어서 하루가 지난 후에 one에 넣어줌.

 

 

def solution(garden):
    answer = 0
    direct=[[0,1],[-1,0],[0,-1],[1,0]] # 아래, 왼쪽, 위, 오른쪽
    length=len(garden)
    one=[]
    count=0
    # 1
    for i in range(length):
        for j in range(length):
            if garden[i][j] == 1:
                one.append([i,j])
                count+=1
	# 2
    while count!=length**2:
        two=[]
        while one:
            now=one.pop()
            for k in direct:
                flower=[now[0]+k[0], now[1]+k[1]]

                if (flower[0]>-1 and flower[0]<length) and (flower[1]>-1 and flower[1]<length):
                    # 3
                    if garden[flower[0]][flower[1]] != 1:
                        garden[flower[0]][flower[1]] = 1    
                        two.append([flower[0],flower[1]])
                        count+=1
        one=two
        answer+=1 
    return answer
    
# 아래는 테스트케이스 출력을 해보기 위한 코드입니다.
garden1 = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0,0,0,0,0], [0,0,0,0,0]]
ret1 = solution(garden1)

 

728x90
반응형

'Programming language > Python' 카테고리의 다른 글

PyQt5  (0) 2023.05.23
COS Pro 2급 python 1차  (0) 2022.05.23
selenium을 이용한 crawler  (0) 2022.02.08
[CodingStudy] Beakjoon 6588번 골드 바흐의 추측  (0) 2022.01.02
[CodingStudy] Heap -더 맵게  (0) 2021.11.22

댓글