문제



풀이
1. 처음에는 직사각형만 생각했다가 +형태인 경우도 있겠다는 생각이 들었다.
2. 그래서 가장 작은 x, 가장 작은 y 좌표, 가장 큰 x,y 좌표를 각각 찾아내서 작은 좌표~큰 좌표로 드래그 하면 간단하게 해결될 거라 생각했다.
3. 예제 케이스를 풀어보니 틀렸길래 왜 틀렸나 문제를 다시 살펴보니 가장 큰 좌표는 좌표 + 1이 되어야 함을 찾아냈다.
코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<string> wallpaper) {
// wallpaper의 원소 중 빈칸은 . 파일이 있으면 #
vector<int> answer;
// + 형태인 경우 시작점은 가장 작은 luy와 가장 작은 lux가 좌표인 점을 구해야 하므로 이를 기준으로 삼아보자
// 끝점은 반대로 가장 큰 rdx, 가장 큰 rdy를 구해야 한다.
int MinPosY = 50;
int MinPosX = 50;
int MaxPosY = -1;
int MaxPosX = -1;
for(int PosX = 0; PosX < wallpaper.size(); ++PosX)
{
for(int PosY = 0; PosY < wallpaper[0].size(); ++PosY)
{
if(wallpaper[PosX][PosY] == '#')
{
if(MinPosY > PosY)
{
MinPosY = PosY;
}
if(MinPosX > PosX)
{
MinPosX = PosX;
}
if(MaxPosY <= PosY)
{
MaxPosY = PosY+1;
}
if(MaxPosX <= PosX)
{
MaxPosX = PosX+1;
}
}
}
}
answer.push_back(MinPosX);
answer.push_back(MinPosY);
answer.push_back(MaxPosX);
answer.push_back(MaxPosY);
return answer;
}
다른 사람의 풀이
1. 미리 answer에 값을 집어넣고 min,max만을 활용해서 간단하게 풀었다.
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
| 달리기 경주 (0) | 2025.03.24 |
|---|---|
| 개인정보 수집 유효기간 (0) | 2025.03.13 |
| 성격 유형 검사하기 (0) | 2025.03.10 |
| 둘만의 암호 (0) | 2025.02.24 |
| 대충 만든 자판 (2) | 2025.02.07 |