[프로그래머스/카카오] 외벽점검

2021. 10. 31. 15:32·Algorithm (PS)
728x90

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

 

코딩테스트 연습 - 외벽 점검

레스토랑을 운영하고 있는 "스카피"는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기로 했습니다. 레스토랑이 있는 곳은 스노우타운으로 매우 추운 지역이어서 내부 공사를 하

programmers.co.kr

 

1. 원형을 선형으로 생각해보자 , weak의 길이를 두배로 늘려서 선형으로 생각한다. 

2. 친구들을 배치해야한다. -> 파이썬에서는 순열 조합을 permutations 함수로 구현할 수 있다. 친구들을 배치하는 방법을 모두 구한다음에 완전탐색으로 필요한 친구의 최소 값을 구한다. dist의 길이가 1이상 8 이하이고 8! = 약 4만 정도이므로 완전탐색으로 풀어도 괜찮다.

 

우리가 점검할 레스토랑의 구조는 원형이다.

원형 구조에서 지점은 0 ~ n-1까지 n개이다. 이 weak의 길이를 두 배 늘려서 원형을 선 위에 놓고 생각할 수 있다.

입출력 예 2를 보면 

weak 는 [1, 3, 4, 9, 10] 이고 n 은 12 이다.

이를 두배로 늘려서 생각하면 1, 3, 5, 9, 10, (1+12), (3+12) ...

1, 3, 5, 9, 10, 13, 15, 21, 22 가 된다.그러면 우리가 원일 때 시계방향에서 0을 넘어가는 경우의 계산을 쉽게 생각할 수 있다. 

* 기억하자 구현에서는 길이나 크기를 늘려서 생각하면 좀 더 쉽게 접근 가능할 수도 있다 !

from itertools import permutations

def solution(n, weak, dist):
    length = len(weak)
    for i in range(length):
        weak.append(weak[i]+n)
    answer = len(dist) + 1 
    # 0 부터 length -1 까지의 위치를 각각 시작점으로 설정 
    
    for start in range(length):
        for friends in list(permutations(dist, len(dist))): # 친구를 배열하는 방법을 하나씩 확인한다
            count = 1 # 투입할 친구의 수 
            position = weak[start] + friends[count-1] # 해당 친구가 점검할 수 있는 마지막 위치 
            # 시작점 부터 모든 취약 지점을 확인 
            for index in range(start, start+length):
            # 점검할 수 있는 위치를 벗어난 경우 
                if position < weak[index]:
                    count += 1 
                    if count > len(dist):
                        break
                    position = weak[index] + friends[count -1]
            answer = min(answer, count)
    if answer > len(dist):
        return -1
    
    return answer

weak = [1,3,4,9,10] dist = [3,5,7] 의 경우에

여기서 permutations로 구한 친구들 배치 순서가 5-3-7 이라고 가정해보자 , friends가 현재 [5,3,7] 이라는 거다. 

그러면 count 1 일때 , 5만큼 갈 수 있는 친구를 우선 배치한다.그럼 그 친구가 가고난 후 위치는 ?

position = weak[start] + friends[count - 1] 이고 1 + 5 = 6 이 된다.즉, 현재 친구0 이 가고 난 후 위치는 6이다. 

그런데 아직 우리는 9 랑 10 지점도 가야한다. 아직 weak 가 남아있는지 판단하는 부분이

if position< weak[index] 이다 

판단할 때는 start 시작지점부터 10이 있는 마지막 지점까지 for문으로 하나씩 점검하면 간단하다 ! 

728x90

'Algorithm (PS)' 카테고리의 다른 글

백준 18405 경쟁적 전염 Python 풀이  (0) 2021.11.03
[백준/파이썬/삼성] 14502 파이썬 풀이  (0) 2021.10.31
백준 15868 치킨배달 파이썬, 삼성 SW 기출문제  (0) 2021.10.26
백준 1697 숨바꼭질 파이썬 풀이  (0) 2021.09.07
백준 1074 파이썬 - Z  (2) 2021.09.07
'Algorithm (PS)' 카테고리의 다른 글
  • 백준 18405 경쟁적 전염 Python 풀이
  • [백준/파이썬/삼성] 14502 파이썬 풀이
  • 백준 15868 치킨배달 파이썬, 삼성 SW 기출문제
  • 백준 1697 숨바꼭질 파이썬 풀이
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (613)
    • Data Engineering (42)
      • Apache Spark (11)
      • Databricks & Delta Lake (9)
      • Airflow (3)
      • SQL (6)
      • Trouble Shooting (2)
      • Hadoop (2)
      • MLOps (1)
    • Cloud Engineering (104)
      • AWS (23)
      • Linux 🐧 (29)
      • Docker 🐳 (21)
      • Kubernetes ⚙️ (20)
      • Ansible (10)
    • Computer Science (87)
      • 네트워크 (9)
      • 운영체제 (25)
      • 정보처리기사 (48)
      • CS 기술 면접 스터디 (3)
    • Programming Languages (27)
      • Python (17)
      • C와 C++ (10)
    • Backend (5)
      • Django (2)
    • 프로젝트 (2)
      • 테크포임팩트 (2)
    • iOS (11)
      • 레이블러리 (2)
    • Algorithm (PS) (275)
      • LeetCode (6)
    • 개발일기 (30)
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (5)
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

  • ansible
  • Databricks
  • 스파크
  • python
  • dfs
  • 프로그래머스
  • AWS
  • Swift
  • linux
  • 데이터브릭스
  • 백트래킹
  • 빅데이터
  • 파이썬
  • 데이터엔지니어
  • 쿠버네티스
  • 클라우드
  • 카카오코딩테스트
  • Kubernetes
  • 백준
  • Leetcode
  • EC2
  • docker
  • 코딩테스트
  • 리눅스
  • 알고리즘
  • 운영체제
  • SPARK
  • 데이터엔지니어링
  • dp
  • BFS

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[프로그래머스/카카오] 외벽점검
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.