알고리즘/프로그래머스문제풀이

[Python/프로그래머스]외벽점검_구현

개발자 덕구🐾 2022. 10. 15. 15:23
728x90

 

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/60062

 

프로그래머스

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

programmers.co.kr

 

 

 

 

어렵다!!😈😈

 

 

 

그래도 이런 구현을 풀어야 코테를 풀 수 있는거겠지 

 

 


 

 

 

 

1. 먼저  계산을 쉽게 하기 위해 원형을 선형으로 바꿔준다. (원래 값에 원형의 길이를 더해 붙여주면 된다.)

 

2. 각각의 모든 weak 지점에서 시작하는 경우를 모두 확인하기 위해 permutation으로 순서를 정하기 전에 

for문으로 weak의  길이만큼 돌린다. 

 

3. position을 구한다. count도 1로 초기화 해준다.

 

4. weak의 길이만큼 weak를 돌면서 현재 위치와 비교한다.

 

 

5. 현재위치가 더 작은 곳을 발견한다면  

 

 

6. count를 1증가시키고 position을 다시 설정한다. 

 

 

7. 하나의 friends가 끝날 때마다 더 작은 수로 answer을 갱신한다.

 

 

8. 만약 answer가 친구의 수 보다 크면 -1을 return 한다. 

 

 

 

from itertools import permutations
def solution(n, weak, dist):
    length = len(weak)
    
    # 원형을 선형으로 
    for i in range(length) :
        weak.append(weak[i] + n)
    # 최소값을 구하는 거니까 나올 수 없는 최대값으로 초기화 
    # 모든 친구들 동원 + 1 
    answer = len(dist) +1 
    
    #  각각의 weak지점에서 시작 
    for start in range(length) :
        for friends in list(permutations(dist,len(dist))) :
            count = 1 
            # 첫번째 친구만 나옴 
            position = weak[start] + friends[0]
            # weak들을 돈다. 
            for index in range(start,start+length) :
                # 보수한 위치가 weak보다 작으면 
                if position < weak[index] :
                    # 한명 더 나온다.
                    count+=1
                    # 친구보다 나온 사람이 많으면 그만둬 (불가능)
                    if count>len(dist) :
                        break
                    # weak[index]에서 친구가 나옴 
                    position = weak[index] + friends[count-1]
            answer = min(answer, count)
    if answer > len(dist) :
        return -1 
    return answer

 

 

 

 

이코테 풀이 봤습니다!

P.335 

 

 

반응형