TeamH4C_ProjectH4C/프로그래밍 언어

[TeamH4C_C언어] 포인터를 활용한 문제

P4P3R_H 2021. 3. 6. 22:41

이번에 CodeUp에 나와있는 문제들을 포인터를 사용하여 풀어보겠습니다.

문제는 순서대로 1차원 배열 동적 할당, 2차원 배열 동적 할당, 특정 조건의 수 출력, 함수를 이용하여 비교출력, 특정 순서로 출력의 문제를 풀어봤습니다.

 

문제풀이

 

1차원 배열 문제로 배열의 형태가 아닌 포인터 형태로 나타내기 위해 malloc함수를 사용하여 동적 할당 형식으로 변수를 생성하고 변수를 역참조하며 값을 입력하는 방식으로 각각의 주소에 값을 넣어 입력값을 입력받았습니다.

그 후, 가장 빠른 번호를 출력시키기 위해 임시 저장 변수에 첫 번째 포인터의 값을 저장시킨 후 비교하여 가장 작은 값을 출력하도록 코드를 작성할 수 있습니다.

 

이번에는 2차 배열 문제로 이중 포인터를 사용하여 2차 배열의 형식을 만들어 문제를 풀었습니다.

메모리를 할당한 후, 바둑알의 모양을 미리 입력을 받고 입력받을 때, *(*(arr + i)+j)를 이용하여 가로의 값을 입력할 수 있도록 역참조하며 한 칸의 가로가 입력되면 세로가 한 칸 증가되며 값을 할당할 수 있는 반복식을 만들도록 합니다.

그 후, 입력받은 x좌표와 y좌표에 따라 흑과 백이 교체되는데 배열은 0번 주소부터 시작하기에 입력받은 좌표에서 1만큼 작게 변동되도록 만들기만 하면 됩니다.

마지막으로 출력을 하며 메모리에 할당된 것을 해제하도록 free함수를 가로부터 해제해주도록 합니다.

 

먼저 입력된 5의 배수의 출력은 배열 형태로 입력받도록 만들고, 마지막 배열 값에 0의 값을 넣어 앞의 값들을 모두 비교하고 5의 배수가 없을 때 0을 출력하도록 만들 수 있습니다.

 

변수의 값을 바꾸는 함수 부분을 만들어 main함수에서 호출하는 방식으로 만든 포인터 문제로 입력받은 정수의 주소 값을 받아와 역참조한 값이 더 작은 값이 먼저 출력되도록 만들었습니다.

 

마지막 포인터 활용 문제입니다.

기본적인 할당 포인터 문제로 두 입력값을 받아와 시작 위치와 마지막 위치를 정하여 반복하며 해당 위치의 포인터의 값을 역참조하여 출력하였습니다.

여기서 포인터에 값을 입력하기 위해 gets함수로 문자열로 입력받은 것을 한 문자씩 변환하여 포인터에 저장하도록 하였기에 문자열을 한 문자로 인식하여 출력할 수 있었습니다.

 

지금까지 포인터를 활용하여 CodeUp에 나와있는 포인터와 연관되어 있는 5문제를 풀어보았습니다.

문제를 푸는 과정에서 조금 복잡하게 푼 문제도 있었지만, 그로 인해 포인터에 대해 더욱 자세히 알 수 있었던 기회였습니다. 모르는 것이 있다면 시간이 걸리지만, 반복하여 푸는 것도 좋은 방법인 것 같습니다.

비록 복잡한 코드였을지 모르지만 제 코드를 봐주셔서 감사합니다!🙇‍♂️