반응형
- 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<input.lengh; 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 |