두 수를 a, b 변수에 입력 받은 후 void형 myswap 함수를 작성해 a의 값이 b 값보다 크다면 두 변수의 값이 서로 바뀌도록 하는 것이 목적이다. myswap 함수를 작성해야하는데, 주어진 코드를 보면 myswap의 인자로 변수의 값이 아닌 변수의 주소가 주어진다. 이 주소를 포인터로 입력 받아 역참조해 값을 서로 바꿔주면 될 것 같다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void myswap(int *A, int *B)
{ // int형 포인터 매개변수 A, B로 a, b의 메모리 주소를 전달 받음
if (*A < *B)
return;
// 역참조로 A가 가리키는 주소의 값이 B가 가리키는 주소의 값보다 작은지 확인하고 작으면 함수 종료
int tmp = *A;
*A = *B;
*B = tmp;
// 역참조로 A, B가 가리키는 주소의 값을 서로 바꿈
}
int main()
{
int a, b;
scanf("%d%d", &a, &b);
myswap(&a, &b);
printf("%d %d", a, b);
}
위는 문제의 코드 + 작성한 myswap 함수를 합친 것이다.(제출은 myswap 함수만 해야한다.)
먼저 myswap에 인자로 입력 값이 저장된 a, b의 주소가 전달되니, 이 주소를 int형 포인터 A, B로 전달 받는다. a의 값이 b의 값보다 클 경우 값을 서로 바꿔주는 것이므로 일단 A, B에 저장된 주소를 역참조해 A 주소의 값이 B 주소의 값보다 작은지 확인하는 조건문을 작성하고 만약 작다면 함수를 return으로 종료한다. 작지 않다면 값을 바꿔주는 코드를 수행한다.
값을 바꾸는 코드로는 먼저 int형 변수 tmp를 선언해 A를 역참조한 값을 저장해 준다.(*A = *B를 바로 써주면 *A의 값이 사라지기 때문에 *B에 원래 *A의 값을 넣어줄 수 없다.) 그리고 A를 역참조한 값을 B를 역참조한 값으로 바꾸고 B를 역참조한 값은 A를 역참조한 값이 저장된 tmp로 바꿔준다.
'Old (2021.01 ~ 2021.12) > Algorithm' 카테고리의 다른 글
CodeUp 1098 : 설탕과자 뽑기 (0) | 2021.03.07 |
---|---|
CodeUp 1810 : (포인터) 부분 문자열 (0) | 2021.03.07 |
CodeUp WriteUp With C Language (0) | 2021.02.27 |
CodeUp 1076 ~ 1099 With Python (0) | 2021.02.04 |
CodeUp 1001 ~ 1075 With Python (0) | 2021.02.01 |