Po_tta_tt0
콩심콩 팥심팥 🌱
Po_tta_tt0
전체 방문자
오늘
어제
  • 분류 전체보기 (266)
    • 🐛 회고 (14)
    • 💭 생각 (2)
    • 🤸‍♀️ 내 프로젝트 (16)
      • FISH-NEWS (8)
      • MBTI 과몰입 테스트 (2)
      • twitter clonecoding with TS (4)
      • pilzagenda (2)
    • 👨‍👩‍👧‍👦 팀 프로젝트 (2)
      • 피우다 프로젝트 (0)
      • SEMO(세상의 모든 모임) (1)
      • 마음을 전하는 텃밭 (1)
      • Stackticon (0)
    • 👨‍💻 CS지식 (11)
    • ✍ 공부 (94)
      • JavaScript (21)
      • TypeScript (39)
      • Html (0)
      • CSS (2)
      • React (18)
      • NextJS (7)
      • Vue (1)
      • Python (1)
      • Django (0)
      • 개발환경 & 그 외 (2)
    • 🏄‍♀️ 코딩테스트 (99)
      • 🐍 Python (99)
    • 🐙 Git & GitHub (3)
    • 📑 오류기록 (8)
    • 📚 우리를 위한 기록 (9)
    • 수업 (3)
    • 강의 등 (2)
    • 👩‍🎓 SSAFY (0)
    • 👋 우테코 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • bfs
  • 문자열
  • 백준 파이썬
  • React
  • DP
  • 구현
  • 플로이드 워셜
  • dfs
  • 시뮬레이션
  • 백준 숨바꼭질
  • Next.js
  • 파이썬
  • 파이썬 감시 피하기
  • 파이썬 다익스트라
  • BFS + DP
  • react-router-dom
  • js
  • 자바스크립트
  • 백준
  • 이분탐색

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Po_tta_tt0

콩심콩 팥심팥 🌱

🏄‍♀️ 코딩테스트/🐍 Python

[ 백준 17087] ( python ) 숨바꼭질 6

2022. 4. 18. 08:05
반응형

 

📚 숨바꼭질 6

 

문제

수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다.

수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이동할 수 있다. 수빈이의 위치가 동생이 있는 위치와 같으면, 동생을 찾았다고 한다.

모든 동생을 찾기위해 D의 값을 정하려고 한다. 가능한 D의 최댓값을 구해보자.

입력

첫째 줄에 N(1 ≤ N ≤ 105)과 S(1 ≤ S ≤ 109)가 주어진다. 둘째 줄에 동생의 위치 Ai(1 ≤ Ai ≤ 109)가 주어진다. 동생의 위치는 모두 다르며, 수빈이의 위치와 같지 않다.

출력

가능한 D값의 최댓값을 출력한다.

예제 입력 1

3 3
1 7 11

예제 출력 1

2

예제 입력 2

3 81
33 105 57

예제 출력 2

24

예제 입력 3

1 1
1000000000

예제 출력 3

999999999

 

 

 

✍ 접근

  • 누나와 동생 사이의 거리의 최대공약수를 구하는 문제임을 이해

 

오답 코드(시간 초과)

import sys
n,s = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
for i in range(n):
    if arr[i]-s < 0:
        arr[i] = abs(arr[i]-s)
    else:
        arr[i] = arr[i]-s
length = min(arr)
while 0 < length:
    for x in arr:
        if x % length != 0 :
            break
    else:
        print(length)
        break
    length-=1
  • math.gcd를 사용하기 전 다른 방법으로 풀어보려고 했다.
  • 누나와 동생 간의 거리의 절대값을 구해서 arr을 업데이트하고
  • 누나와 동생 간의 최소거리가 0 이상일 때 최소거리에서 1씩 빼 가면서 D(length)의 값을 찾는다
    1. 누나와 동생 간의 거리를 D값으로 나눴을 때 맞아 떨어지지 않으면 for문을 끝낸다
    2. 만약 동생과의 모든 거리가 같으면 print(length)로 D 값을 출력한다

 

 

정답 코드

import sys
import math
n,s = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
for i in range(n):
    if arr[i]-s < 0:
        arr[i] = abs(arr[i]-s)
    else:
        arr[i] = arr[i]-s
for i in range(1,n):
    arr[0] = math.gcd(arr[0],arr[i])
print(arr[0])
  • math 안에 있는 gcd를 이용해서 누나와 동생의 거리들 간의 최대공약수를 찾는다.
  • 누나와 동생 간 거리의 절대값을 구해서 arr을 업데이트하는 것 까지는 동일
  • 1부터 n까지 새로운 for문을 돌면서
    1. arr[0]을 새로운 최대공약수로 바꿔가면서 이 값과 arr 안에 들어 있는 다른 값을 비교해 궁극적인 최대공약수를 찾고 출력한다

 

 

 

⭐ 배움

  • 내 방법으로 푸는 것도 좋지만 문제에서 원하는 풀이 방식이 확고할 때는 고집부리지 말자
  • import math. // math.gcd() 를 이용해 최대공약수를 구할 수 있다.
반응형

'🏄‍♀️ 코딩테스트 > 🐍 Python' 카테고리의 다른 글

[ 백준 1920] ( python ) 수 찾기  (0) 2022.04.19
[ 백준 1373] ( python ) 2진수 8진수  (0) 2022.04.18
[ 백준 17298] ( python ) 오큰수  (0) 2022.04.06
[ 백준 10799 ] ( python ) 쇠막대기  (0) 2022.04.05
[ 백준 17413] ( python ) 단어 뒤집기 2  (0) 2022.04.05
    '🏄‍♀️ 코딩테스트/🐍 Python' 카테고리의 다른 글
    • [ 백준 1920] ( python ) 수 찾기
    • [ 백준 1373] ( python ) 2진수 8진수
    • [ 백준 17298] ( python ) 오큰수
    • [ 백준 10799 ] ( python ) 쇠막대기
    Po_tta_tt0
    Po_tta_tt0
    감자의 코딩하는 블로그 콩심은데 콩나고 팥심은데 팥난다

    티스토리툴바