코딩 테스트 문제 풀이

Do it 알고리즘 코딩 테스트 - 7번

김복칠 2023. 10. 27. 01:52

문제.

https://www.acmicpc.net/problem/1940

 

1940번: 주몽

첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고

www.acmicpc.net


코드.

n = int(input())     # 재료의 갯수
m = int(input())     # 갑옷이 완성되는 숫자
a = input().split()
num = []
num1 = 0
num2 = n-1
count = 0

for i in a:
    num.append(int(i))

num.sort()
print(type(num1),type(num2))

while num1 < num2:
    if num[num1] + num[num2] < m:
        num1 += 1
    elif num[num1] + num[num2] == m:
        count += 1
        num1 += 1
        num2 -= 1
    else:
        num2 -= 1

print(count)
입력 값 출력 값
6

9

2 7 4 1 5 3
2

해석 및 풀이.

★ 이 문제는 N개의 수를 임의로 입력받아서 두개의 수를 더해 M이 되는 횟수를 출력하는 프로그램을 만드는 문제입니다.

n = int(input())     # 재료의 갯수
m = int(input())     # 갑옷이 완성되는 숫자
a = input().split()
num = []
num1 = 0
num2 = n-1
count = 0

먼저 입력받아야 하는 개수 N과 합이되어야 하는 수 M, N개의 임의의 수를 받아서 넣을 리스트 a(num) 를 input() 함수로 받아줍니다. 이때 모두 정수형으로 치환해주도록 합니다. 이 문제는 양쪽끝에 숫자를 위치시켜놓고 한칸씩 좁혀가면서 맞는 숫자가 있다면 count에 1을 더해주어야 합니다. 그렇기 때문에 처음 인덱스번호를 부여받을 num1 을 0으로 마지막 인덱스번호를 부여받을 num2 를 n-1로 입력해줍니다.

num.sort()
print(type(num1),type(num2))

while num1 < num2:
    if num[num1] + num[num2] < m:
        num1 += 1
    elif num[num1] + num[num2] == m:
        count += 1
        num1 += 1
    else:
        num2 -= 1

print(count)

이후 입력받은 리스트 num 을 오름차순으로 나열해놓고 num1과 num2가 만나기 직전까지 반복문을 돌려줍니다. 합이 M보다 작다면 시작점에 있는 인덱스번호 num1을 높여주고 합이 M보다 크다면 마지막점에 있는 인덱스번호 num2를 낮춰줍니다. 합이 M이라면 count에 1을 더해주고 num1을 높여줍니다.

예) M = 9 , num = [1,2,3,4,5,7]

반복회차 num[num1] num[num2] num[num1] + num[num2]
1 num[0] = 1 num[5] = 7 8
2 num[1] = 2 num[5] = 7 9 // count += 1
3 num[2] = 3 num[5] = 7 10
4 num[2] = 3 num[4] = 5 8
5 num[3] = 4 num[4] = 5 9 // count += 1
6 num[4] = 5 num[4] = 5 num1 = num2
반복문 조건에 벗어남

마지막으로 count에 입력된 값을 print로 출력해줍니다.