코딩테스트 4번__rt,lt -> 연속순열문제 ->two pointers

JoMinJun·2021년 7월 26일
0

코딩테스트

목록 보기
29/39
package main3;


import java.util.Scanner;



public class Main3 {

	public  int solution(int n, int m , int []arr1){
		
		// n 개
		// 합 m
	
		
		int count = 0;
		
		int sum = 0;
		
		//n개중에서
		for(int i = 0; i < n ; i ++ ) {
			//System.out.println("....");
			sum = 0;
			for(int j = i+1 ; j < n ; j ++) {
				
				
				
				if(arr1[i] == m) {
					count++;}
				
				sum +=  arr1[j];
				//System.out.println(sum);
				if(sum == m) {
					count++;
					
			
				}
				
			
			}
			
			
		}
		

		return count;
	};
	
	
	
	
	
	
	
	
	
	
	
	
	public static void main(String[] args) {
		
		
		 Main3 main2 = new Main3();
		
		 Scanner kb = new Scanner(System.in);
		
		
		 
		 int n=kb.nextInt();
		 int m=kb.nextInt();
		 
		int []arr1 = new int[n];
		
		 for(int i=0; i<n; i++){
			 
		
			arr1[i] = kb.nextInt();
			 
			 
		 };
		 
		 
	   
	    
	     
	   
	     
		 
	   System.out.println(main2.solution(n,m,arr1));	
	     
		
	}
	

}

(two pointers) 사용하여 풀어낸 방식


// rt,lt 사용

package main3;


import java.util.Arrays;
import java.util.Scanner;



public class Main3 {
	
	
public  int solution(int n, int m , int []arr1){
		

	
	
	
	//n 이 갯수
	//m 이 나와야하는 숫자
	int count = 0;
    int sum = 0;
	int lt = 0;
	for(int rt = 0; rt < n; rt ++) {
		if(arr1[rt] == m) {
			count ++;
		}
		sum += arr1[rt];
		if(sum == m) {
			count ++;
		}
		
		while(sum >= m) {
			sum -= arr1[lt];
			lt ++;
			if(sum == m) {
				count++;
			}
		}
	}
	
	
	
	
	
	
	// 2 1 3 1 1 1 2 
	
	
	
	
	
	
	
	
		return 0;
	};
	
	
	
	
	
	
	
	
	
	
	
	
	public static void main(String[] args) {
		
		
		 Main3 main2 = new Main3();
		
		 Scanner kb = new Scanner(System.in);
		
		
		 
		 int n=kb.nextInt();
		 int m=kb.nextInt();
		 
		int []arr1 = new int[n];
		
		 for(int i=0; i<n; i++){
			 
		
			arr1[i] = kb.nextInt();
			 
			 
		 };
		 
		 
	   
	    
	     
	   
	     
		 
	   System.out.println(main2.solution(n,m,arr1));	
	     
		
	}
	

}

profile
기술정리

0개의 댓글