
문제 설명
카펫의 갈색 격자의 수와 노란색 격자의 수가 주어졌을 때 카펫의 가로, 세로 크기를 return
https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이법
우선 가로 세로의 크기를 탐색하기 위해서 이중 for문을 두었다
겉의 for문은 가로의 길이고, 안의 for문은 세로의 길이이다
문제에서 가로의 길이가 세로의 길이보다 같거나 더 길다고 했으니, 안의 for문이 끝나는 조건은 세로의 길이가 가로의 길이보다 클 때이다
'brown + yellow'의 값과 '가로 * 세로'의 값이 같은 경우에만 탐색할 수 있게 조건문을 걸어주었다
이제, 구한 가로의 길이와 세로의 길이를 통해 문제에서 주어진 갈색과 노란색의 개수가 일치하는지 알아보면 된다
문제 설명을 보면 카펫의 테두리는 갈색이고, 중앙은 노란색이다
따라서 갈색의 개수를 통해서 우리가 구한 가로의 길이와 세로의 길이가 문제에서 원하는 카펫인지 검사하면된다
검사를 하는 방식은 갈색은 테두리니까 (가로의 길이 * 2)를 우선 구해준다
가로의 길이 * 2를 하게 되면 카펫의 위,아래 테두리의 값을 구한 것이다
이제 좌,우의 테두리의 값을 구하기 위해 {(세로의 길이 - 2) * 2}를 구해준다
(세로의 길이 - 2)를 한 이유는 위, 아래를 빼준 것이다
여기에 * 2를 하여 좌, 우의 테두리 길이를 구하여준다
이렇게 구한 갈색의 개수가 문제에서 주어진 갈색의 개수가 맞다면 answer에 값을 넣고 바로 return 한다
소스 코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int brown, int yellow) {
vector<int> answer;
for (int i = 1; i <= 5000; i++) {
for (int j = 1; j <= i; j++) {
if (i * j < brown + yellow)
continue;
else if (i * j > brown + yellow)
break;
int brown_cnt = i * 2;
brown_cnt += (j - 2) * 2;
if (brown_cnt == brown) {
answer.push_back(i);
answer.push_back(j);
return answer;
}
}
}
return answer;
}
'Algorithm Study' 카테고리의 다른 글
[프로그래머스] 2단계 - 더 맵게 (0) | 2024.03.11 |
---|---|
[프로그래머스] 3단계 - 이중우선순위큐 (0) | 2024.03.09 |
[프로그래머스] 2단계 - [1차] 뉴스 클러스터링 (0) | 2024.02.16 |
[백준] 4485 녹색 옷 입은 애가 젤다지? (0) | 2024.02.15 |
[프로그래머스] 2단계 - 완주하지 못한 선수 (0) | 2024.02.15 |