-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[그리디] 3월 26일 #6
base: main
Are you sure you want to change the base?
The head ref may contain hidden characters: "06_\uADF8\uB9AC\uB514"
[그리디] 3월 26일 #6
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
#include <iostream> | ||
#include <vector> | ||
|
||
using namespace std; | ||
|
||
int main() { | ||
ios::sync_with_stdio(false); | ||
cin.tie(NULL); cout.tie(NULL); | ||
|
||
int n, k, cnt = 0; | ||
vector<int>value; | ||
cin >> n >> k; | ||
|
||
value.assign(n, 0); | ||
for (int i = 0; i < n; i++) { | ||
cin >> value[i]; | ||
} | ||
|
||
while (n--) { | ||
cnt += k / value[n]; // n-1 -> n-2 -> ... -> 0 | ||
k %= value[n]; //나머지 계산 가능 | ||
} | ||
|
||
cout << cnt; | ||
|
||
//int n = 3; | ||
//while (n--) { | ||
// cout << n << "\n"; | ||
//} | ||
//2 -> 1 -> 0 출력 | ||
|
||
//int n = 3; | ||
//while (--n) { | ||
// cout << n << "\n"; | ||
//} | ||
//2 -> 1 출력 | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
#include <iostream> | ||
#include <vector> | ||
#include <algorithm> | ||
|
||
using namespace std; | ||
|
||
typedef pair<int, int> meet; | ||
|
||
int main() { | ||
ios::sync_with_stdio(false); | ||
cin.tie(NULL); cout.tie(NULL); | ||
|
||
int n, cnt = 0; | ||
int end; | ||
vector<meet>v; | ||
cin >> n; | ||
v.assign(n, { 0,0 }); | ||
|
||
for (int i = 0; i < n; i++) { | ||
cin >> v[i].second >> v[i].first; // first에 끝나는 시간 넣어야 정렬! | ||
} | ||
|
||
sort(v.begin(), v.end()); // 정렬해야 가장 빨리 끝나는 회의 찾을 수 있음! | ||
end = 0; | ||
|
||
for (int i = 0; i < n; i++) { | ||
if (end > v[i].second) { | ||
continue; | ||
} | ||
cnt++; | ||
end = v[i].first; | ||
} | ||
|
||
cout << cnt; | ||
|
||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
#include <iostream> | ||
#include <vector> | ||
|
||
using namespace std; | ||
|
||
int solution (int n, vector<int> lost, vector<int> reserve){ | ||
int answer = 0; | ||
vector<int> clothes_cnt (n+1, 1); //옷의 개수를 저장하는 벡터. 초기 설정값 1. | ||
|
||
//잃어버린 인덱스 -> -- | ||
for (int i = 0; i < lost.size(); i++) { | ||
clothes_cnt[lost[i]]--; | ||
} | ||
//여벌 인덱스 -> ++ | ||
for (int i = 0; i < reserve.size(); i++) { | ||
clothes_cnt[reserve[i]]++; | ||
} | ||
|
||
for (int i=0; i<= n; i++){ | ||
if (clothes_cnt[i] >=1){ | ||
continue; | ||
} | ||
|
||
if (clothes_cnt[i-1]==2){ | ||
clothes_cnt[i-1]--; | ||
clothes_cnt[i]++; | ||
} | ||
else if (clothes_cnt[i+1]==2){ | ||
clothes_cnt[i+1]--; | ||
clothes_cnt[i]++; | ||
} | ||
} | ||
|
||
for (int i=1; i<= n; i++){ | ||
if (clothes_cnt[i] >= 1){ | ||
answer++; | ||
} | ||
} | ||
|
||
return answer; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
#include <iostream> | ||
#include <vector> | ||
#include <string> | ||
|
||
using namespace std; | ||
|
||
const int ALPHA_NUM = 26; | ||
|
||
string makePalindrome(string name, vector<int>& cnt) { | ||
string ans = ""; | ||
char center_alpha; | ||
int center_cnt = 0; | ||
|
||
for (char c : name) { | ||
cnt[c - 'A']++; | ||
} | ||
|
||
for (int i = 0; i < ALPHA_NUM; i++) { | ||
// 써줘야 없는 글자 출력 안됨! | ||
// 0도 2로 나누면 나머지 0이라 이 조건문 없으면 출력되기 때문! | ||
if (cnt[i] == 0) { | ||
continue; | ||
} | ||
|
||
if (cnt[i] % 2 != 0) { | ||
Comment on lines
+20
to
+25
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 두개의 if문을 합치면 더 가독성이 높을 것 같네요! |
||
center_alpha = i+'A'; | ||
center_cnt++; | ||
if (center_cnt == 2) { | ||
return "I'm Sorry Hansoo"; | ||
} | ||
} | ||
|
||
int n = cnt[i]/2; | ||
while (n--) { | ||
ans += i + 'A'; | ||
} | ||
|
||
} | ||
|
||
if (center_cnt == 1) { | ||
ans += center_alpha; | ||
} | ||
for (int i = name.size()/2 - 1; i >= 0; i--) { | ||
//이렇게 해야 name의 길이가 짝수든 홀수든 알맞게 거꾸로 출력됨 | ||
ans += ans[i]; | ||
} | ||
|
||
return ans; | ||
} | ||
|
||
int main() { | ||
ios::sync_with_stdio(false); | ||
cin.tie(NULL); cout.tie(NULL); | ||
|
||
string name; | ||
vector<int>cnt(ALPHA_NUM, 0); | ||
cin >> name; | ||
|
||
cout << makePalindrome(name, cnt); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 함수 분리해서 구현하신거 너무 좋네요! |
||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#include <iostream> | ||
#include <vector> | ||
#include <string> | ||
|
||
using namespace std; | ||
|
||
const int SAW_NUM = 8; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P3: 상수 선언 너무 좋습니다 최고~ |
||
vector<string> li; //톱니 바퀴를 저장 | ||
// li[0] -> 1번째 톱니바퀴 저장 | ||
vector<pair<int, int>> stack; //회전톱니바퀴의 인덱스와 방향 저장 | ||
vector<int>visited; //회전했는지 검사하는 벡터 | ||
|
||
|
||
void check_rotation(int n, int dir) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P3: 앗 함수는 카멜케이스로 쓰는 것이 권장인데 제가 잘못 써서 저때문에 헷갈리셨나봅니다..! |
||
if (n > 0 && visited[n - 1] == 0) { // 첫번째 바퀴를 제외 + 왼쪽 바퀴가 회전 검사 X 이면 | ||
if (li[n][6] != li[n - 1][2]) { // 맞닿아 있는 면이 서로 다른 극인지 체크 | ||
stack.push_back(make_pair(n - 1, dir * -1)); | ||
visited[n - 1] = 1; | ||
check_rotation(n - 1, dir * -1); // n-1번째는 dir 반대방향으로 회전하므로 | ||
} | ||
} | ||
|
||
if (n < li.size() - 1 && visited[n + 1] == 0) { // 마지막 바퀴를 제외 + 오른쪽 바퀴가 회전 검사 X 이면 | ||
if (li[n][2] != li[n + 1][6]) { // 맞닿아 있는 면이 서로 다른 극인지 체크 | ||
stack.push_back(make_pair(n + 1, dir * -1)); | ||
visited[n + 1] = 1; | ||
check_rotation(n + 1, dir * -1); // n+1번째는 dir 반대방향으로 회전하므로 | ||
} | ||
} | ||
} | ||
|
||
int main() { | ||
ios::sync_with_stdio(false); | ||
cin.tie(NULL); cout.tie(NULL); | ||
|
||
int t, k; | ||
cin >> t; | ||
|
||
li.resize(t); | ||
//li.assign(t,""); // 벡터크기는 t회로 | ||
|
||
for (int i = 0; i < t; i++) { | ||
cin >> li[i]; //톱니바퀴의 상태 입력 | ||
} | ||
|
||
cin >> k; | ||
for (int i = 0; i < k; i++) { //입력을 받자마자 처리 | ||
int num, direction; | ||
cin >> num >> direction; //회전 번호와 방향 입력 | ||
stack.clear(); //벡터 초기화 | ||
stack.push_back(make_pair(num - 1, direction)); // 인덱스 1차이 나는 점 주의! | ||
visited.assign(t, 0); //0으로 방문처리 초기화 | ||
visited[num - 1] = 1; // 첫 회전 톱니바퀴 방문처리 | ||
|
||
check_rotation(num - 1, direction); //로테이션 확인 | ||
|
||
//stack에 돌려야하는 톱니바퀴들 전부 저장됨. | ||
|
||
while (!stack.empty()) { //스택이 빌 때까지 톱니바퀴를 돌려줌 | ||
pair<int, int>top = stack.back(); //마지막 원소 | ||
stack.pop_back(); //마지막 원소 삭제 | ||
|
||
int tmp_num = top.first; //현재 돌려야할 톱니바퀴 인덱스 | ||
int tmp_dir = top.second; //돌릴 방향 | ||
|
||
|
||
if (tmp_dir == 1) { //시계방향 회전 | ||
//0번 -> 1번, 7번 -> 0번 | ||
li[tmp_num] = li[tmp_num].back() + li[tmp_num].substr(0, 7); | ||
//맨 뒤 7번 인덱스 붙이고 0~6번 인덱스 붙임 (0번째위치부터 7자리) | ||
} | ||
else { //반시계방향 회전 | ||
//0번 -> 7번, 7번 -> 6번 | ||
li[tmp_num] = li[tmp_num].substr(1) + li[tmp_num][0]; | ||
// 1~7번 붙여주고 0번 인덱스 붙여줌 | ||
} | ||
Comment on lines
+67
to
+76
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P3: 주석을 꼼꼼하게 달아주셔서 보기 편했습니다~! |
||
} | ||
} | ||
|
||
int cnt = 0; | ||
for (int i = 0; i < t; i++) { | ||
if (li[i][0] == '1') { // 12시 방향이 S극인 톱니바퀴의 개수 출력. | ||
cnt++; | ||
} | ||
} | ||
|
||
cout << cnt; | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
#include <iostream> | ||
#include <vector> | ||
|
||
using namespace std; | ||
|
||
long long findSpeed(vector<long long>& d) { | ||
long long min = 0; | ||
for (long long i : d) { | ||
if (i > min) { | ||
min = i; | ||
} | ||
else { | ||
min = ((min-1) / i + 1) * i; | ||
// min-1 안해주면 틀림! | ||
// 그냥 min 하면 같은 속도 연속으로 주어졌을 때 오류 | ||
} | ||
} | ||
Comment on lines
+8
to
+17
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 문제의 조건을 잘 파악해서 최소 속도를 잘 찾아주셨네요!👍 |
||
|
||
return min; | ||
} | ||
|
||
int main() { | ||
ios::sync_with_stdio(false); | ||
cin.tie(NULL); cout.tie(NULL); | ||
|
||
int n; | ||
vector<long long>d; | ||
cin >> n; | ||
|
||
d.assign(n, 0); | ||
|
||
for (int i = n-1; i >= 0; i--) { | ||
cin >> d[i]; | ||
} | ||
|
||
cout << findSpeed(d); | ||
|
||
return 0; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
많이 사용하는 숫자를 따로 상수로 선언해주신 점 좋아요!👍