J 크 2023. 8. 29. 20:33
728x90
반응형

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

 

1940번: 주몽

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

www.acmicpc.net

주몽보던 시절이 그립다


※  문제를 요약하면 아래와 같습니다.

  주몽 장군님이 철기군을 양성하기 위해 갑옷 생성

  갑옷 재료들은 번호가 있으며 갑옷은, 두개의 재료에 적혀진 번호를 합쳐서 임의의 숫자 M이되면 생성

  가지고 있는 재료 N개를 가지고 2개를 선택하여 더했을 때 M이 되는 갯수 출력

  Input : 첫줄에 재료의 개수 N, 둘째줄에 M, 세번째 줄에 N개의 갑옷 번호 출력

  Output : 갑옷을 만들 수 있는 갯수 출력


◈ Input - 1

6
9
2 7 4 1 5 3

◈ Output - 1

2

 ◎  코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.

주어진 배열의 값 중 2개를 투포인터 탐색으로 합했을 때 M이 되는지 확인

투포인터 탐색 : FirstPoint 고정 후 SecondPoint 증가 형태로 탐색


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(System.out));

		int N = Integer.parseInt(bReader.readLine());
		int M = Integer.parseInt(bReader.readLine());
		
		int[] narrJumong = new int[N];
		StringTokenizer st = new StringTokenizer(bReader.readLine());
		for(int i = 0; i < N; i++)
			narrJumong[i] = Integer.parseInt(st.nextToken());
		
		int nFirstPoint = 0;
		int nSecondPoint = 1;
		
		int nResult = 0;
		while(nFirstPoint < N-1) {
			if(narrJumong[nFirstPoint] + narrJumong[nSecondPoint] == M)
				nResult++;
			
			if(nSecondPoint == N-1) {
				nFirstPoint++;
				nSecondPoint = nFirstPoint+1;
			} else
				nSecondPoint++;
		}
		bWriter.write(String.valueOf(nResult));

		// bWriter.write(String.valueOf(narrTemp));
		bWriter.flush();
		bWriter.close();
	}
}

읽어주셔서 감사합니다!

Good Luck! (피드백 감사합니다!)