2026. 1. 26. 17:12ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/6887

접근 방법 - 기초적인 사칙연산 문제
백준의 6887번 문제는 기초적인 사칙연산을 활용하여 비교적 간단하게 해결할 수 있는 문제이다.
해당 문제는, 한 변이 1인 정사각형 타일의 개수가 입력으로 주어질 때 이를 활용하여 가장 크게 만들 수 있는 정사각형의 한 변의 크기를 구하여 출력하면 되는 문제이다.
외국어로 작성된 문제 지문에 대한 해석 설명본은 아래 링크에 있으니, 문제 해결할 시 함께 참고하면 좋을 것이다.
https://www.acmicpc.net/board/view/123495
위 문제대로라면, 9개의 타일이 있는 경우엔 이를 모두 활용하여 한 변의 크기가 3인 정사각형을 만들 수 있을 것이다.
다만, 8개의 타일이 있다면 한 변의 크기가 3인 정사각형을 만들 수 없기 때문에, 4개의 타일만을 활용하여 한 변의 크기가 2인 정사각형을 만들 수 있다고 볼 수 있다.
필자는 위와 같은 원리를 참고하여, 주어진 입력값보다 작은 숫자 중 가장 큰 값을 가지는 제곱수를 찾아서 이를 활용하여 정답을 출력하게끔 하였다.
보다 자세한 설명은 아래에 기재해 놓으니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 설명과 코드를 참고해 보길 바란다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 가지고 있는 타일의 개수(n)를 입력받는다.
2) 만들 수 있는 가장 큰 정사각형의 한 변의 길이를 구하기 위해, 임의의 변수 i를 미리 선언해 둔다.
변의 길이를 1부터 시작하여 점진적으로 늘려나가며 정답을 확인할 예정이기 때문에, 우선 1 값으로 초기화하도록 한다.
3) 무한 반복문을 수행하여, 아래의 연산을 취하도록 한다.
- 현재 i의 값을 한 변으로 삼는 정사각형의 크기(i*i)와 n 값을 비교하도록 한다.
만약 i*i 값이 더 크다면, 해당되는 크기를 한 변으로 갖는 정사각형은 만들 수 없다는 것을 뜻한다. 따라서 이 경우엔 i-1을
형식에 맞추어 정답으로 출력한 뒤, 반복문을 탈출하도록 한다.
다만 위 조건을 만족하지 않는다면, 이 이상의 크기를 갖는 정사각형을 만들 수 있기 때문에, i에 1을 더한 뒤 다음 루프의 연산을 수행하도록 한다.
4) 3)의 반복문에서 빠져나왔다면, 정답을 이미 출력했다고 볼 수 있다. 따라서, 이만 실행을 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;
//백준 6887번 코드
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
int i = 1;
while (true) {
if (i * i > n) {
cout << "The largest square has side length " << i - 1 << "." << endl;
break;
}
i++;
}
}
제출 결과

(2025.04.13 백준 6887번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
| [백준 BOJ] 12109번 Hindeks (C++/cpp) (0) | 2026.01.30 |
|---|---|
| [백준 BOJ] 32089번 部員の変遷 (C++/cpp) (0) | 2026.01.27 |
| [백준 BOJ] 32776번 가희와 4시간의 벽 2 (C++/cpp) (0) | 2026.01.23 |
| [백준 BOJ] 28214번 크림빵 (C++/cpp) (0) | 2026.01.23 |
| [백준 BOJ] 30793번 gahui and sousenkyo 3 (C++/cpp) (0) | 2026.01.18 |