일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준 #boj #baekjoon
- VS #비주얼스튜디오
- 비주얼스튜디오 #코드스니펫
- flutter #깃
- flutter #플러터
- firebase #파이어베이스
- 유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과
- boj #baekjoon #c++
- 플러터 #flutter #restful #rest api
- flutter #플러터 #분석
- unity #2d-game
- flutter #app #취준
- 백준 #c++
- 비주얼 스튜디오 #vs #visual studio
- 백준 #boj
- boj #c++
- #유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과정
- git #unity #깃허브
- baekjoon #백준 #boj
- flutter #git
- 로컬저장소 #이름변경
- boj #baekjoon
- flutter #상태관리
- 백준
- unity #2d-game #minigame #vscode
- baekjoon #boj #c++
- flutter #todolist
- flutter #firebase #플러터 #파이어베이스 #연동
- 인턴 #프론트엔드 #개발자 #프론트엔드개발자 #취준
- Flutter
- Today
- Total
cococo-coding
[C++] 10162번. 전자레인지 본문
문제 분석
우선 그리디 알고리즘의 문제이다.
문제를 보면 '버튼 A,B,C를 누른 횟수의 합은 항상 최소가 되어야 한다. ~ 10번은 최소 횟수가 아니기 때문에 답이 될 수 없다'라는 문구를 보면 그리디임을 알 수 있다.
그리고 맞춰야 할 조건들이 몇 개 있다.
1. T초를 맞추지 못하면 음수-1을 출력한다.
2. 버튼 조작 횟수를 출력할 때 해당 버튼을 누르지 않는 경우는 0을 출력한다.
이 부분만 주의하면 무난하게 풀 수 있는 문제였다.
알고리즘 설계
우선은 요리시간을 초단위로 변환해서 (300초, 60초, 10초) 벡터로 만들어준다.
그리고 버튼클릭횟수도 총합이 아니라 각 버튼별 횟수로 출력해야하므로 벡터(나 배열)로 만들어준다.
기본적으로 벡터의 개수만 넣어서 만들어주면 자동으로 0으로 초기화된다.
vector <int> click(3); //0으로 초기화
보통 그리디 알고리즘처럼 for문으로 버튼횟수만큼 아래 구문을 반복한다.
click[i]=t / sec[i];
t=t% sec[i];
만약 t가 0이 되면 반복문을 나오도록 break처리를 해준다. 이때 나와서 버튼클릭횟수가 0인 애들은 이미 위에서 벡터를 0으로 초기화했기 때문에 문제가 없다.
그리고 위에서 1번 조건( T초를 맞추지 못하면 음수-1을 출력한다.) 을 구현할 코드를 다음과 같이 짰다.
만약 T가 남아있다면(T>0) T초를 맞추지 못한 것이므로, -1을 출력했다.
그게 아니라면 click[i] 벡터를 for문으로 반복해서 출력해주었다.
코드
#include <iostream>
#include <vector>
using namespace std;
/*
1. 요리시간t를 입력받음
2. 버튼클릭수를 구함
3. 버튼클릭수를 출력
*/
int main() {
//1
int t;
cin >> t;
//2
vector <int> click(3); //0으로 초기화
vector <int> sec = { 300, 60,10 };
for (int i = 0; i < 3; i++) {
if (t == 0) break;
click[i]=t / sec[i];
t=t% sec[i];
}
if (t > 0) cout << "-1";
else {
for (int i = 0; i < 3; i++)
cout << click[i] << ' ';
}
return 0;
}
느낀 점
기본 그리디 알고리즘 구문은 다 비슷한 것 같다.
몫과 나머지를 구하는 구문을 반복하면 된다.
이제 여기서 난이도가 갈리는 부분은 조건들이 여러 개 있는지의 여부인 것 같다.
'[BOJ] 코드 모음 > C++_알고리즘' 카테고리의 다른 글
[C++ 풀이] 11034. 캥거루 세마리2 (1) | 2024.02.01 |
---|---|
[C++ 풀이] 14659번. 한조서열정리하고옴ㅋㅋ (0) | 2024.02.01 |
[C++ 풀이] 2810번. 컵홀더 (1) | 2024.01.30 |
[C++ 풀이] 2864번. 5와 6의 차이 (0) | 2024.01.28 |
[C++] 5585번. 거스름돈 (1) | 2024.01.28 |