인프런 커뮤니티 질문&답변

cepe님의 프로필 이미지
cepe

작성한 질문수

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

완전탐색 (For반복문)

[완전탐색] 1090번 문제 문의

해결된 질문

작성

·

436

1

안녕하세요. 강사님!

완전탐색적방법으로 접근하는 방법을 익히고싶은데 이해하고 있는게 맞는지 궁금해서 질문남겼습니다!

24:10분쪽 내용을 보면서 궁금한 내용이 있습니다!

 

만약에 x축[] 짱구:5, 철수:7 , 맹구:9 일때

문제 조건에 제시된 1 - 1_000_000까지 전체 순회를 하면서

1번 위치일때 짱구: 1 - 5, 철수 : 1 - 7, 맹구: 1 -9

2번 위치일떄 짱구: 2 - 5, 철수 : 2 - 7, 맹구: 2 -9

x[] 원소를 기준으로 쭉 1_000_000까지 모든경우의수를 다구하는게 맞는지 궁금합니다.

 

최적화 아이디어를 하기전 완전탐색적인 방법을 제대로 이해하고있는지 체크하기 위함입니다!

 

감사합니다!

 

 

 

답변 2

2

코딩 센세님의 프로필 이미지
코딩 센세
지식공유자

네 맞습니다!

 

처음에 시간이나, 범위를 고민하지 않고 "완전탐색"만 생각하고 코드를 짠다면,

 

1에서 1_000_000 까지 모든 좌표를 기준으로 모든 집과의 거리를 비교해주면 됩니다!

cepe님의 프로필 이미지
cepe
질문자

안녕하세요!
다시 궁금증이 생겨서 질문남겼습니다!

"모든 좌표를 기준으로 모든 집과의 거리를 비교해주면 됩니다!" 답변을 해주셨는데요!

 

완전탐색으로 코드를 짠다면

 

n = int(input())

arr = []

number = 1_000_001

mid_result = [] * number

result = [0] * n

for _ in range(n):
    a, b = map(int,input().split())
    arr.append([a,b])

# 모든 좌표의수 다 넣기
for i in range(n):
    min_datas = float('inf')
    a, b = arr[i]
    for x in range(1, number):
        for y in range(1, number):
            dist = abs(a - x) + abs(b - y)
            
            if dist < min_datas:
                min_datas = dist

    result[i] = min_datas

for res in result:
    print(res)
    

이렇게 짜는게 제가 이해한게 맞는지 모르겠습니다 ㅠㅠ

이거는 첫 질문에 대한 코드를 짠겁니다!

그리고 예제에서 (15,14) - 0 <- 값이 어떻게 나온건지 감이 잡히지않습니다 ㅠㅠ

저 코드라면 0이 나올수없을꺼같아서요 ㅠㅠ

 

 

코딩 센세님의 프로필 이미지
코딩 센세
지식공유자

완전탐색적으로 짠다면, 올려주신 코드처럼 짜신게 맞고,

 

반복문을 돌면서, x가 15에 있고 y가 14에 있는 경우에

 

집(15,14) 까지의 최소거리가 0이 됩니다!

1

안녕하세요, 인프런 AI 인턴이에요.
완전탐색은 모든 경우의 수를 다 따져보는 방법으로, 제시된 조건에 따라 x축의 원소를 기준으로 1부터 1,000,000까지 전체 순회를 하는 것이 맞습니다.
각 위치마다 짱구, 철수, 맹구의 위치를 표현하고, 조건에 맞는 경우들을 찾아내는 것입니다.
이러한 완전탐색의 방법을 통해 문제를 해결할 수 있지만, 경우의 수가 많아질수록 계산 시간이 오래 걸릴 수 있기 때문에 최적화 아이디어를 고려해보는 것도 좋은 방법입니다.
더 궁금한 점 있으시면 언제든지 질문해주세요. 감사합니다!

cepe님의 프로필 이미지
cepe

작성한 질문수

질문하기