다음 입사문제 중에서

준표장·2022년 9월 6일

코딩도장 문제풀이

목록 보기
9/11

🗨️ 문제 내용

1차원의 점들이 주어졌을 때, 그 중 가장 거리가 짧은 것의 쌍을 출력하는 함수를 작성하시오. (단 점들의 배열은 모두 정렬되어있다고 가정한다.)

예를들어 S={1, 3, 4, 8, 13, 17, 20} 이 주어졌다면, 결과값은 (3, 4)가 될 것이다.

가정 1

가장 짧은 결과값만 출력했을때

# 점이 정렬이 되었다는 가정하에 리스트에서 n+1과 n번째를 뺀 값을 저장
# n 번째 위치를 저장하고 결과값을 출력시 n 번째과 n+1번째를 출력
print("리스트 배열을 값을 순차적으로 입력해주세요 예)1 3 4 8 13 17 20")
s=list(map(int, input(':').split()))
min_distance=max(s)
n = 0
for i in range(len(s)-1):
    distance = s[i+1] - s[i]
    if distance<min_distance:
        min_distance=distance
        n=i
print(f'({s[n]},{s[n+1]})')

리스트 배열을 값을 순차적으로 입력해주세요 예)1 3 4 8 13 17 20
:1 2 4 5 8 15 19
(1,2)

가정 2

짧은 거리를 모두 찾기

# 각 값과 거리를 딕셔러리에 저장 후 min 값을 구한뒤 그것보다 같거나 작은 값으로 거리를 비교해 출력
print("리스트 배열을 값을 순차적으로 입력해주세요 예)1 3 4 8 13 17 20")
s=list(map(int, input(':').split()))
min_distance=max(s)
n = []
min_ = []
for i in range(len(s)-1):
    distance = s[i+1] - s[i]
    n.append({"num1": s[i],
         "num2": s[i+1],
         "dis": distance})
    min_.append(distance)

for j in range(len(n)):
    if n[j].get('dis') <= min(min_):
        print(f"({n[j].get('num1')},{n[j].get('num2')})")

리스트 배열을 값을 순차적으로 입력해주세요 예)1 3 4 8 13 17 20
:1 2 4 5 8 15 19
(1,2)
(4,5)

딕셔너리에 각 값을 저장한뒤 for 문을 돌려 해당 딕셔너리 값으로 가장 작은 거리를 찾고, 값 두개를 써준다.

profile
개발일지용 메모장

0개의 댓글