[백준 BOJ] 25703번 포인터 공부 (C++/cpp)

2023. 2. 9. 17:40PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/25703

 

25703번: 포인터 공부

용모는 오늘 객체지향프로그래밍1 시간에 포인터에 대해 배웠다. 포인터란, 프로그래밍 언어에서 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 의미한다. C/C++에서 포인터는 (

www.acmicpc.net

백준 BOJ 25703번 포인터 공부 문제 사진1
백준 BOJ 25703번 포인터 공부 문제 사진2

 

접근 방법 - 반복문을 이용한 단순 출력 문제

백준의 25703번 문제는 반복문을 응용하여 해결해야 하는 출력문 작성 문제이다.

해당 문제는, 입력받은 숫자의 횟수만큼 특정 규칙대로 출력을 수행해야 하는 문제이다.

구현 자체에는 크게 어려운 점이 없지만 규칙을 찾아내는 과정이 다소 어려웠던 것으로 기억되는 문제이다.

필자는 개략적으로 아래처럼 구상하면서 코드를 설계하였다.

(0번째 줄부터 출력이 수행된다고 가정한다.)
- 첫 줄 출력의 경우, 우측에 &a를 출력해야 하기 때문에 반복문을 사용하지 않고 개별적으로 출력문을 작성하였다.
- 두 번째 줄 출력부터는, 우측에 &ptr을 출력해야 하기 때문에 반복문을 사용해 출력문을 반복 수행하도록 하였다.
좌측의 *(별)의 개수와 ptr 뒤의 숫자는 현재 위치의 줄 번호를 참고하여 출력한다.
우측의 ptr 뒤의 숫자는 현재 위치의 줄 번호-1을 참고하여 출력한다.
(이때, 출력할 숫자가 1일 때에는 예제에 나와있는 것처럼 그냥 숫자를 출력하지 않도록 한다.)
주로 출력할 문구 :: " int <star*>ptr<number1> = &ptr<number2> "
(꺽쇠(<>)로 감싸진 부분은 매 출력마다 변경되는 부분, 그 이외는 매번 그대로 출력되는 부분이다.)

필자는 매 ps글마다 코드에 대한 설명을 기재하는데, 해당 문제에선 따로 기재하지 않았다.

필자가 생각한 규칙에 대해 설명을 하자니, 왠지 풀이에 대해 더 이해를 못 할 것 같아서였다.

그래서 위처럼 약간의 힌트와 아래의 코드만 올려놓으니, 혹여나 해당 문제를 해결하지 못하였다면 아래의 코드를 참고해 보길 바란다.

필자는 아래처럼 코드를 작성하여 문제를 해결하였다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 25703번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	cin >> n;
	
	cout << "int a;" << endl;
	cout << "int *ptr = &a;" << endl;
	for (int i = 1; i < n; i++) {
		cout << "int ";
		for (int j = 0; j <= i; j++) { cout << "*"; }
		cout << "ptr" << i + 1 << " = &ptr";
		if (i != 1) { cout << i; }
		cout << ";" << endl;
	}
}

 

제출 결과

백준 BOJ 25703번 포인터 공부 문제 C++ 제출 결과

(2023.01.06 백준 25703번 문제 제출 결과)

반응형