코딩/2-JAVA

C0801보통완전탐색 , C0802보통완전탐색데이터 , C0803중복해결

tree0505 2025. 6. 24. 15:16
반응형
    • C08보통완전탐색

  • C0801개념01_보통완전탐색
package C0801보통완전탐색;

import java.util.Arrays;

public class C0801개념01_보통완전탐색 {
	public static void main(String[] args) {
		
	    /*
	        [개념] 일차원 비교 방법
	            a배열과 b배열을 비교하고 서로 값이 같으면 숫자 0으로 변경하시오.
	            아래 배열을 보면 값 10만 같다.     
	    */

	    int[] a = {10, 20, 30, 40};
	    int[] b = {10,  5, 20,  9};

	    int size = a.length;
	    for(int i=0; i<size; i++) {
	        if(a[i] == b[i]) {
	            a[i] = 0;
	            b[i] = 0;
	        }
	    }
	    System.out.println("a = " + Arrays.toString(a));
	    System.out.println("b = " + Arrays.toString(b));

	    /*
		    [개념] 이차원 비교 방법
	            c배열의 값이 d배열 안에 있다면 둘 다 0으로 변경하시오.
	            이번엔 자리별로 검사하는 것이 아니라, 
	            c배열의 값 10이 d배열 안에 자리에 상관없이 포함되어있다면 0으로 변경해야 한다. 
	            마찬가지로 c배열의 값 20도 d에 포함되어있기 때문에, 0으로 변경해야 한다. 
	            
	            c배열 하나마다 d전체를 전부 비교해야 하므로, 총 16번 반복해야 한다.    
	            
	        [조인]
	            이와 같이 한배열의 각각의 값이 다른모든 배열을 검사하는것을 조인이라고한다. 
	    */

	    int[] c = {10, 20, 30, 40};
	    int[] d = { 7,  5, 20, 10};

	    size = c.length;
	    for(int i=0; i<size; i++) {
	        for(int j=0; j<size; j++) {
	            if(c[i] == d[j]) {
	                c[i] = 0;
	                d[j] = 0;
	            }
	        }
	    }
	    System.out.println("c = " + Arrays.toString(c));
	    System.out.println("d = " + Arrays.toString(d));

	}
}

  • C0801개념02_비교큰값a기준
package C0801보통완전탐색;

import java.util.Arrays;

public class C0801개념01_보통완전탐색 {
	public static void main(String[] args) {
		
	    /*
	        [개념] 일차원 비교 방법
	            a배열과 b배열을 비교하고 서로 값이 같으면 숫자 0으로 변경하시오.
	            아래 배열을 보면 값 10만 같다.     
	    */

	    int[] a = {10, 20, 30, 40};
	    int[] b = {10,  5, 20,  9};

	    int size = a.length;
	    for(int i=0; i<size; i++) {
	        if(a[i] == b[i]) {
	            a[i] = 0;
	            b[i] = 0;
	        }
	    }
	    System.out.println("a = " + Arrays.toString(a));
	    System.out.println("b = " + Arrays.toString(b));

	    /*
		    [개념] 이차원 비교 방법
	            c배열의 값이 d배열 안에 있다면 둘 다 0으로 변경하시오.
	            이번엔 자리별로 검사하는 것이 아니라, 
	            c배열의 값 10이 d배열 안에 자리에 상관없이 포함되어있다면 0으로 변경해야 한다. 
	            마찬가지로 c배열의 값 20도 d에 포함되어있기 때문에, 0으로 변경해야 한다. 
	            
	            c배열 하나마다 d전체를 전부 비교해야 하므로, 총 16번 반복해야 한다.    
	            
	        [조인]
	            이와 같이 한배열의 각각의 값이 다른모든 배열을 검사하는것을 조인이라고한다. 
	    */

	    int[] c = {10, 20, 30, 40};
	    int[] d = { 7,  5, 20, 10};

	    size = c.length;
	    for(int i=0; i<size; i++) {
	        for(int j=0; j<size; j++) {
	            if(c[i] == d[j]) {
	                c[i] = 0;
	                d[j] = 0;
	            }
	        }
	    }
	    System.out.println("c = " + Arrays.toString(c));
	    System.out.println("d = " + Arrays.toString(d));

	}
}

  • C0801개념03_비교큰값b기준
package C0801보통완전탐색;

public class C0801개념03_비교큰값b기준 {
	public static void main(String[] args) {
		
	    /*
	        아래와같이 b배열을 기준으로 하니 모양이 달라진다.
	        어떤기준으로 첫번째 for를 설정할지 주의해야한다. 
	    */
	    /*
	        [문제]
	            a배열과 b배열 전체를 비교하여 
	            b배열 의 값보다 a배열의 값들중 큰값들만 출력하시오.
	            단, 작거나 같은값은 0을 출력한다.
	            
	        [정답]
	            10 0 0 0 0 0 0
	            0 0 20 0 0 0 0
	            0 0 0 0 0 0 0
	            0 0 0 0 0 0 0
	            0 0 0 0 45 0 0
	    */

	    int[] a = {10, 20, 30, 40, 45, 68, 21};
	    int[] b = {10,  5, 20,  54, 45};

	    for(int i=0; i<b.length; i++) {
	        for(int j=0; j<a.length; j++) {
	            if(a[j] == b[i]) {
	                System.out.print(a[j] + " ");
	            }else{
	                System.out.print(0 + " ");
	            }
	        }
	        System.out.println();
	    }


	}
}

  • C0802보통완전탐색데이터

  • C0802개념01보통완전탐색데이터
package C0802보통완전탐색데이터;

public class C0802개념01보통완전탐색데이터 {
	public static void main(String[] args) {
		
	    /*
	         [조인]
	            이와 같이 한배열의 각각의 값이 다른모든 배열을 검사하는것을 조인이라고한다. 
	    */

	    /*
	        [문제]
	            number 배열은 학생 번호이고, 
	            score 배열은 각 학생의 시험점수이다.
	            search 배열은 학생들이 시험 결과가 궁금해서  검색한 번호들이다. 
	            각 학생이 검색한 순서대로 점수를 출력하시오.
	        [정답]
	            1002 : 65
	            1004 : 1
	            1003 : 23
	            1001 : 4
	            1005 : 45    
	    */

	    int[] number = {1001, 1002, 1003, 1004, 1005, 1006};
	    int[] score =  {4,      65,   23,    1,   45,    7};
	    
	    int[] search = {1002, 1004, 1003, 1001, 1005};

	    for(int i=0; i<search.length; i++) {
	        
	        for(int j=0; j<number.length; j++) {
	            
	            if(search[i] == number[j]) {

	               System.out.println(search[i] + " : " + score[j]);
	            }
	        }
	    }

	}
}

  • C0802보통완전탐색데이터_문제

  • C0802문제01
    • for(int i = 0; i<input.lengh; i++)
      • for( int j = 0; j <input.length; j++) 
    • input의 배열대로 반복문이 돌아가는 것이 아닌. 
    • input.lengh; 즉 input의 배열의 길이 대로 돌아간다. 
    • 즉 for 이것을 쓰는 것은 반복문이 몇번 돌아갈까. 이게 중요하다. 
    • 반복문이 중요한것은 오히려 반복문 안에 있는 내용이 더 중요한것 
    • ✅ 핵심 요약
    • 구문                                                                 의미
      for(int i = 0; i < input.length; i++) i는 0부터 시작해서 input 배열의 크기만큼 반복 (총 6번)
      input 배열 자체가 중요한가요? ❌ 반복 횟수를 정하는 기준일 뿐. 핵심은 i값을 어떻게 활용하느냐
      반복문에서 중요한 건? ✅ 반복 "횟수"와 그 안에서 i를 이용해 무엇을 하느냐가 진짜 중요
  • 결론
    • for (int i = 0; i < 배열.length; i++) → 배열의 길이 = 반복 횟수라는 뜻
    • i는 그 반복문에서 방번호 역할을 하며,
    • i를 어떤 배열에 넣느냐가 실제 처리 내용의 핵심!
  • i와 j는 "현재 반복의 위치"를 의미해요
    • i와 j는 단순한 정수 변수지만,
    • 반복문 안에서는 "현재 몇 번째 반복 중인지",
      현재 위치를 알려주는 방번호 역할을 해요.
/*
	[문제]
		민수는 학교에서 산수시험을 봤다. 
		arr1의 숫자와 arr2의 숫자의 합을 구하는 시험이다.
		input배열은 민수가 작성한 답이다. 
		민수는 답을 순차적으로 적지 않고 뒤섞여서 적었다.
		위 더하기문제의 답을 답안지에서 찾아서 민수는 몇문제 맞췄는지 출력하시오.
	[정답] 
		4  
*/
package C0802보통완전탐색데이터_문제;



public class C0802문제01 {
	public static void main(String[] args) {
		
		int[] arr1 = {4, 65, 23, 1, 45, 7};
		int[] arr2 = {61, 2, 54, 3, 5, 6};
		
		int[] input = {67, 13, 2, 22, 65, 4};
		
		int count = 0; 
		for(int i = 0; i<input.length; i++) { //그냥 반복문의 횟수다. 
			// 이건 결국 for (int i = 0; i < 6; i++) 와 같은 말이에요.
			//즉, **"input 배열의 크기만큼 반복하겠다"**는 뜻일 뿐!
			
			int total = arr1[i] + arr2[i]; 
			//이건 arr1, arr2 모두 길이 6이니까 문제 없음
			//"반복문에서 i가 0일 때 arr1[0] + arr2[0]이 돼서 4 + 61 = 65"
			
			//for(int i = 0; i<input.length; i++) 
				//input이 중요한 것이 아니라. 방번호 대로 반복문이 돈다. 
				//int total = arr1[i] + arr2[i]; 
					//방번호대로 반복문이 돌기 때문에 
					//int total = arr1[0] + arr2[0];
						//이게 가능한 거다. 
			//i는 계속 “방번호”처럼 움직이니까, 세 배열 모두 같은 인덱스의 값을 꺼내서 사용 가능해요
			
			for(int j = 0; j<input.length; j++) {
				if(total == input[j]) {
					count += 1; 
				}
			}
		}
		System.out.println(count);
	}
}


  • C0803중복해결

  • C0803개념01한개씩저장
package C0803중복해결;


import java.util.Arrays;

public class C0803개념01한개씩저장 {
	public static void main(String[] args) {
		
	    /*
	        [문제]
	            numberList는 여러가지숫자를 모아놓은 배열이다.
	            각각의 숫자가 몇개씩 있는지 출력하시오.
	            먼저 arr 배열에 겹치지않게 numberList 에 있는 서로 다른숫자들만 한개씩 저장한다.
	        
	        [정답]
	            [1, 5, 3, 6, 7, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0]
	         
	    */


	    int[] numberList = {1,5,3,3,5,6,6,7,6,7,7,4,2,3,4};
	    int[] arr = new int[numberList.length];
	    

	    int index = 0;
	    for(int i = 0; i < numberList.length; i++){ 

	        int a = numberList[i];
	        int count = 0;
	        for(int j = 0; j < arr.length; j++){ 
	            int b = arr[j];
	            if(a == b){
	                count += 1;
	            }
	        }
	        if(count == 0){
	        	arr[index] = a;
	        	index += 1;
	        }
	    }
	    System.out.println(Arrays.toString(arr)); 

	}
}

  • C0803개념02중복없이저장
package C0803중복해결;


import java.util.Arrays;

public class C0803개념02중복없이저장 {
	public static void main(String[] args) {
		
	    /*
	        [문제]
	            item배열은 기존에 이미있는 상품번호이다.
	            newItem 은 새로 추가할 아이템번호이다. 
	            newItem 에 있는 번호를 item 에 추가하시오.
	            단, 이미 추가된적이 있는 아이템번호는 추가하지마시오.
	    */

	    /*
	        중복금지 알고리즘은 
	        우리가 회원가입을 할때라든지 상품고유번호등에 사용되며, 
	        오로지 한개의 고유번호를 가져야할때 사용한다. 
	    */

	    int[] item  = {1001, 1002, 1003, 1004, 0, 0, 0};

	    int[] newItem = {1005, 1004, 1002, 1007, 1006};
	    
	    int index = 4;
	    for(int i = 0; i < newItem.length; i++){

	        int a = newItem[i];
	        int count = 0;

	        for(int j = 0; j < item.length; j++){
	            if(a == item[j]){
	                count += 1;
	            }
	        }
	        if(count == 0){
	        	item[index] = a;
	            index += 1;
	        }
	    }

	    System.out.println(Arrays.toString(item));

		
	}
}

 

반응형

'코딩 > 2-JAVA' 카테고리의 다른 글

C0807배열입력심화  (0) 2025.06.25
C0804석차 , C0805그룹바이 , C0806규칙찾기  (0) 2025.06.24
C0703규칙찾기 ~ C0704셀프완전탐색입력  (0) 2025.06.24
C0701검색 ~ C0702중복금지  (0) 2025.06.24
C0606중첩반복입력  (0) 2025.06.24