[프로그래머스] 외벽 점검 in python

2022. 1. 19. 22:54·Algorithm (PS)
728x90

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

 

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

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

programmers.co.kr

 

유형 : 구현 , 완전 탐색 

 dist의 길이가 8로, 8! 을 해도 10만을 넘지 않는다. 따라서 완전 탐색으로 풀어도 가능하다. 

1. 원을 리스트로 바꿔서 생각하기 

예시 2의 취약 지점을 원에 표현하면 다음과 같다. 

원형일 경우 0 지점을 넘어갈때 계산이 불편하므로, 이를 일직선 상에 놓는다. 각각의 지점에 n 만큼을 더해주면 한바퀴 돈 다음의 position을 구할 수 있다.

그렇게 되면 [1, 3, 4, 9, 10, 13, 15, 16, 21, 22] 이 일직선 상에 놓인다고 생각할 수 있다. 

 

2. 완전탐색을 위해서, itertools 라이브러리의 permutations로 dist의 모든 순열 구하기

dist 의 원소들을 나열하는 모든 경우를 permutations() 함수를 통해 구한다.

dist = [3, 5, 7]의 경우 

[3, 5, 7] [3, 7, 5], [5, 3, 7], [5, 7, 3], [7, 3, 5], [7, 5, 3] (== 3! ) 총 6개의 경우가 나오는데 이를 list로 묶어서 완전 탐색에 이용했다.

 

3. 현재 위치를 구한다. 취약 지점이 있는 지점을 기준으로, 친구가 갈 수 있는 거리를 더한다,

그리고 그 때의 위치가 weak[i] 보다 큰지 작은지 비교해서, 작다면 친구를 추가하고 현재위치를 갱신한다.

 

전체 코드 

from itertools import permutations

def solution(n, weak, dist):
    length = len(weak) # 취약 지점의 길이 
    for i in range(length):
        weak.append(weak[i] + n) # 2배로 길이를 늘려서 선형으로 나열하기 
    
    # 친구들 정렬 순서 모든 경우를 구하기
    answer = len(dist)+1 
    
    for start in range(length): # weak point들 중에서 시작점 정하기
        for case in list(permutations(dist, len(dist))):
            count = 1
            position = weak[start] + case[count-1]
            for i in range(start, start + length): # 취약지점 시작점 부터 모두 확인하기 이미 취약 지점을 2배로 늘려서 가능함
                if position < weak[i]:
                    count += 1
                    if count > len(dist): # 더이상 친구가 없으면 탐색 실패 
                        break
                    position = weak[i] + case[count-1]
        answer = min(answer, count)
  
    if answer > len(dist):
        return -1
    return answer
728x90

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

[백준] 18405 경쟁적 전염 BFS 풀이  (0) 2022.01.22
[백준] 10992 파이썬  (0) 2022.01.22
HackerRank - Problem Solving (Basic) Skills Certification Test  (0) 2022.01.17
[카카오] 무지의 먹방 라이브 python  (0) 2022.01.16
백준 2583 파이썬  (2) 2022.01.14
'Algorithm (PS)' 카테고리의 다른 글
  • [백준] 18405 경쟁적 전염 BFS 풀이
  • [백준] 10992 파이썬
  • HackerRank - Problem Solving (Basic) Skills Certification Test
  • [카카오] 무지의 먹방 라이브 python
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

인기 글

태그

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

최근 댓글

최근 글

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

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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