티스토리 뷰
이 글에서는 프로그래머스 - 카펫 문제에 대해 다뤄보겠습니다. 문제 풀이는 C++로 이루어져 있고 함께 들어가 있는 개념들도 간단히 정리 해보는 형식으로 작성되었으므로 오타등의 오류가 있을 수 있습니다. 오류 발견시 댓글로 꼭 말씀해주세요! 시작해볼까요?
간만에 종이에 큼지막하게 무엇인가를 끄적여 본 것 같습니다. 이렇게 끄적이는 문제가 저는 좋은데 말이죠. (근데 뭐가 참 어지럽네요 책상이... 과자 껍질도 있고 건강증명서에 스패츌라까지...ㅎ) 뭐 딱 보고 머릿속에 챡챡 떠오르셨다면 부럽습니다~ 전 숫자를 직접 써보고 직접 결과가 나오는 것을 봐야 속이 편한 사람이라 떠오르더라도 간이 코딱지 만해서 바로 코드 짜러 못가죠. 끄적인건 아래와 같이 끄적였지만 깔끔히 정리해보면 [그림 1] 처럼 되겠네요.
풀이 1
사실 계산 기준을 무엇으로 삼느냐에 따라 풀이는 다양해지지만 저는 red 격자 수와 전체 격자 수에 초점을 맞춰 계산을 진행했습니다. 그래서 a 와 b의 후보가 될 것들을 계산 한 후 [ (a + 2)(b + 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
- 코딩테스트
- C++
- 삼성소프트웨어아카데미
- OS
- 프로그래머스
- firebase
- 커넥트재단
- 데이터분석
- nosql
- 인턴
- 졸업작품
- 삼성
- 부스트캠프2020
- RxSwift
- 소프트웨어역량시험
- 소프트웨어아카데미
- ios
- TableView
- 알고리즘
- 컴공졸작
- 컴과졸작
- SWIFT
- 운영체제
- 보안
- 부캠
- 코테
- 부스트캠프
- 컴퓨터공학
- 개발자인턴
- swacademy
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |