티스토리 뷰

CS/알고리즘

[프로그래머스] 카펫

Sueaty 2020. 5. 7. 00:50

이 글에서는 프로그래머스 - 카펫 문제에 대해 다뤄보겠습니다. 문제 풀이는 C++로 이루어져 있고 함께 들어가 있는 개념들도 간단히 정리 해보는 형식으로 작성되었으므로 오타등의 오류가 있을 수 있습니다. 오류 발견시 댓글로 꼭 말씀해주세요! 시작해볼까요?

 

간만에 종이에 큼지막하게 무엇인가를 끄적여 본 것 같습니다. 이렇게 끄적이는 문제가 저는 좋은데 말이죠. (근데 뭐가 참 어지럽네요 책상이... 과자 껍질도 있고 건강증명서에 스패츌라까지...ㅎ) 뭐 딱 보고 머릿속에 챡챡 떠오르셨다면 부럽습니다~ 전 숫자를 직접 써보고 직접 결과가 나오는 것을 봐야 속이 편한 사람이라 떠오르더라도 간이 코딱지 만해서 바로 코드 짜러 못가죠. 끄적인건 아래와 같이 끄적였지만 깔끔히 정리해보면 [그림 1] 처럼 되겠네요.

끄적 끄적
[그림 1]


풀이 1

사실 계산 기준을 무엇으로 삼느냐에 따라 풀이는 다양해지지만 저는 red 격자 수와 전체 격자 수에 초점을 맞춰 계산을 진행했습니다. 그래서 a 와 b의 후보가 될 것들을 계산 한 후 [ (a + 2)(b + 2) == 전체 격자 수 ]인지 확인한 것이죠.

코드를 살펴보면 아래와 같습니다.

[그림 2]

#9. redSize는 빨간 부분의 가로와 세로가 될 수 있는 후보 군들이 이중 벡터로 저장 되어 있습니다. 가령 red = 8일 경우 a = width, b = height 일 때 a ≥ b 이므로 redSize[ [8, 1], [4, 2] ] 이렇게 저장되어 있습니다.

#10. redCandidate 는 계산하는 순간의 a와 b의 값이 들어가 있습니다. 계산이 완료되면 redSize에 push_back 하게 됩니다.

#11 ~ 19. a와 b를 직접 구하는 코드 입니다. a ≥ b 라는 조건 때문에 #13 ~ 14가 있는 것인데요, 세로가 가로보다 길어질 경우 더 이상 후보 군을 찾지 않아도 되기 때문에 break 합니다.

#23 ~ 31. 구한 (a, b)를 이용하여 전체 격자 수와 맞는 후보를 찾습니다. 전체 격자수를 구하기 위해서는 a, b에 각각 +2를 한 후 곱하면 되므로 곱한 값이 brown + red (전체 격자 수) 과 같으면 답으로 return 하게끔 answer에 push_back 을 하고 반복문에서 빠져나옵니다.

 

채점결과 : 정확성 테스트(100.0) = 100.0

'CS > 알고리즘' 카테고리의 다른 글

[BOJ] 2606 바이러스  (0) 2020.05.07
[개념] BFS & DFS  (0) 2020.05.07
[프로그래머스] 소수 찾기  (0) 2020.05.06
[프로그래머스] 모의고사  (0) 2020.05.06
[프로그래머스] K번째 수  (0) 2020.05.03
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함