기존에 있는 배열의 값과 입력을 통해 받은 배열의 값을
비교하고 중복되는 값을 저장하고 출력하는 문제입니다.
꽤 많은 시간이 들었던거같습니다... 이해가 안가면 끝까지 잡고있어야해서..
int main(){
int arr_1[5]; // 기존에 주어질 값
int arr_2[5]; // 입력받을값
int arr_3[5]; // 비교하여 저장할곳
}
배열을 총 3개 각각과 같이 선언해주었습니다.
int main(){
int arr_1[5]={1,2,3,4,5}; // 비교당하는 곳 초기화 (1)
int arr_2[5];
int arr_3[5]={0}; // 저장공간 초기화 (2)
for(int i=0;i<5;i++){
scanf("%d",&arr_2); //arr_2 배열에 값 입력받기(3)
}
}
제가 하고싶은건
다섯칸의 정수형 배열 arr_2[5]에 입력을 받고
기존의 값
int arr_1[5]={1,2,3,4,5}; 와 비교하는 것입니다.
따라서 (1)번과 같이 초기화와 (3)번과 같이 for문으로 arr_2번에 입력받아 저장했습니다
int main(){
int arr_1[5]={1,2,3,4,5};
int arr_2[5];
int arr_3[5]={0};
for(int i=0;i<5;i++){
scanf("%d",&arr_2);
}
for(int i=0;i<5;i++){ // 비교하여 arr_3에 저장!
for(int j=0;j<5;j++){
if(arr_1[i]==arr_2[j]){
arr_3[i]=arr_1[i];
}
}
}
}
여기가 핵심인데 그림으로 좀 그려보겠습니다
선언되어 있는 배열을 그림으로 나타냈습니다.
arr_2 값에는 임의로 5,6,7,8,9 라는 값을 넣어주었다고 임의로 가정했습니다.
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(arr_1[i]==arr_2[j]) {
arr_3[i]=arr_1[i];
}
반복 비교부분만 때서 볼게요
첫번째 반복문의 i가 0 일때 두번째 반복문을 j=0부터 5까지 반복하겠죠?
이말을 다르게 하면 첫번째 배열의 i값의 해당하는 값을 두번째 배열의 모든 값과
반복하여 비교해볼수있다는 얘기입니다
이런 느낌으로요,,
그리고
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(arr_1[i]==arr_2[j]) { // <- 여기로 일치하는지확인하고
arr_3[i]=arr_1[i]; // <-여기로 arr_3번 배열에 중복값 저장시켜요
}
그러면 전부 해당 안되다가
arr_1[4] 와 arr_2[0] 번 값이 5로 일치하죠?
그러면 일치할때 arr_3[ i ]값에 대입하라니까 다음과 같습니다
int main(){
int arr_1[5]={1,2,3,4,5};
int arr_2[5];
int arr_3[5]={0};
for(int i=0;i<5;i++){
scanf("%d",&arr_2[i]); // 여기오타였어요 죄송합니다 ㅎㅎ
}
for(int i=0;i<5;i++){ // 비교하여 arr_3에 저장!
for(int j=0;j<5;j++){
if(arr_1[i]==arr_2[j]){
arr_3[i]=arr_1[i]; // (1)
}
}
}
for(int i=0;i<5;i++){
if(arr_3[i]!=0){ // 위에 (1)번에서 저장안된 애들은 0이겠죠?
printf("%d\n",arr_3[i]); // 0 이 아니라면 출력한다. 그르면 중복된값을 출력하겠죠?
}
}
}
붙잡고 씨름을 좀 했더니 어지럽네요,,
'C언어 > 매일 매일 안빼먹기' 카테고리의 다른 글
(C언어) int 범위 초과하는 숫자 계산(1) / 문자열 역순으로 바꾸기 (0) | 2022.11.14 |
---|---|
(C언어) 백준 10809: 알파벳 찾기 / 배열 비교 (0) | 2022.11.13 |
(C언어) 현재 시간 출력하기 (0) | 2022.11.12 |
(C언어) scanf 문자형 입력 오류 getchar() 해결 (0) | 2022.11.10 |
(C언어) while 문에서 scanf로 무한히 입력 받고 조건 받아서 종료하기 (0) | 2022.11.10 |