-
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
[ 그리디 ] 9월 27일 #6
base: main
Are you sure you want to change the base?
The head ref may contain hidden characters: "06_\uADF8\uB9AC\uB514"
Changes from all commits
7d13621
985ec4a
68967a7
2cfbe8c
b3f6ce5
324b9a6
aebad56
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,5 @@ | ||
{ | ||
"files.associations": { | ||
"queue": "cpp" | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
#include <iostream> | ||
|
||
using namespace std; | ||
|
||
int alphabet[26]; | ||
|
||
bool isPossible(string &mid){ | ||
int count=0; | ||
|
||
for(int i=0;i<26;i++){ | ||
if(alphabet[i]!=0){ | ||
if(alphabet[i]%2==1){ | ||
count++; | ||
if(count>1){ | ||
return false; | ||
Comment on lines
+14
to
+15
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. 팰린드롬을 만들 수 없는 조건을 잘 발견해주셨네요!👍 |
||
} | ||
mid=i+'A'; | ||
} | ||
} | ||
} | ||
return true; | ||
} | ||
|
||
string makePd(string mid){ | ||
string ans; | ||
for(int i=0;i<26;i++){ | ||
for(int j=0;j<alphabet[i]/2;j++){ | ||
ans+=i+'A'; | ||
} | ||
} | ||
ans+=mid; | ||
for(int i=25;i>=0;i--){ | ||
for(int j=0;j<alphabet[i]/2;j++){ | ||
ans+=i+'A'; | ||
} | ||
} | ||
return ans; | ||
} | ||
|
||
int main() | ||
{ | ||
ios_base::sync_with_stdio(false); | ||
cin.tie(NULL); cout.tie(NULL); | ||
|
||
string s, answer="", mid=""; | ||
|
||
cin >> s; | ||
|
||
for(int i=0;i<s.size();i++){ | ||
alphabet[s[i]-'A']++; | ||
} | ||
|
||
if(!isPossible(mid)){ | ||
cout << "I'm Sorry Hansoo"; | ||
return 0; | ||
} | ||
else{ | ||
answer=makePd(mid); | ||
} | ||
Comment on lines
+57
to
+59
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 |
||
|
||
cout << answer; | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
#include <iostream> | ||
|
||
using namespace std; | ||
|
||
int arr[300000]; | ||
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. P2 |
||
|
||
int main() | ||
{ | ||
int n, speed; | ||
|
||
cin >> n; | ||
|
||
for(int i=0;i<n;i++){ | ||
cin >> speed; | ||
arr[i]=speed; | ||
} | ||
|
||
long long answer=arr[n-1]; | ||
|
||
for(int i=n-2;i>=0;i--){ | ||
if(answer%arr[i]==0){ | ||
continue; | ||
} | ||
else{ | ||
answer = (answer / arr[i] + 1) * arr[i]; | ||
} | ||
} | ||
Comment on lines
+20
to
+27
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. 최소 속도를 만드는 조건을 파악해서 문제를 잘 풀어주셨네요!👍 |
||
|
||
cout << answer; | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
#include <iostream> | ||
#include <vector> | ||
|
||
using namespace std; | ||
|
||
typedef pair<int, int> pii; //다음 pair의 이름을 pii로 선언 | ||
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. 별칭 지정 좋습니다! |
||
|
||
const int MAX_HEIGHT = 257; //상수 선언 | ||
const int INF = 987'654'321; //상수 선언 | ||
|
||
int calcCost(int height, int n, int m, int b, vector<vector<int>>& blocks) { //비용 계산 | ||
int cost = 0; //비용 | ||
int added = 0; //추가해야 하는 블록 개수 | ||
int removed = 0; //제거해야 하는 블록 개수 | ||
|
||
for (int i = 0; i < n; i++) { //전달받은 n번 동안 반복 | ||
for (int j = 0; j < m; j++) { //전달받은 m번 동안 반복 | ||
int gap = abs(height - blocks[i][j]); //목표한 높이와 블록의 차를 변수에 넣기 | ||
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. abs 함수 사용 좋습니다! |
||
|
||
if (blocks[i][j] > height) { //목표한 높이보다 높은 칸일 때 | ||
removed += gap; //차이만큼의 블록을 제거 | ||
} | ||
else if (blocks[i][j] < height) { //목표한 높이보다 낮은 칸일 때 | ||
added += gap; //차이만큼의 블록을 추가 | ||
} | ||
} | ||
} | ||
|
||
cost = 2 * removed + added; //비용 계산 | ||
|
||
// 블록 개수가 부족하다면 모든 땅의 높이를 height로 만드는 것이 불가능 | ||
return (added > (b + removed)) ? INF : cost; //블록 개수가 부족하면 INF 리턴, 아닐 시 cost 리턴 | ||
} | ||
|
||
pii makeGroundEven(int n, int m, int b, vector<vector<int>>& ground) { //모든 땅의 높이를 같게 만드는 비용과 그 높이 계산 | ||
int minCost = INF; //최소 비용 | ||
int height = 0; //높이 | ||
|
||
for (int i = 0; i < MAX_HEIGHT; i++) { //최대 높이까지 둘러보는 동안 | ||
int cost = calcCost(i, n, m, b, ground); //비용 계산 | ||
if (cost <= minCost) { //비용이 최소비용보다 낮거나 같을 경우 | ||
minCost = cost; //최소비용 변수에 현재 비용 넣기 | ||
height = i; //높이를 현재 보고 있는 높이 값으로 설정 | ||
} | ||
} | ||
|
||
return {minCost, height}; //최소 비용과 그 높이를 리턴 | ||
} | ||
|
||
int main() { //메인 함수 | ||
int n, m, b; //입력받기 위한 변수 | ||
|
||
// 입력 | ||
cin >> n >> m >> b; //입력받기 | ||
vector<vector<int>> ground(n, vector<int>(m)); //고르게 만들어야 할 땅 | ||
for (int i = 0; i < n; i++) { //입력 받은 n번 동안 반복하며 | ||
for (int j = 0; j < m; j++) { //입력 받은 m번 동안 반복하며 | ||
cin >> ground[i][j]; //현재 땅을 입력 받기 | ||
} | ||
} | ||
|
||
pii answer = makeGroundEven(n, m, b, ground); //땅을 고르게 만드는 데 드는 비용과 그 높이를 연산 | ||
|
||
cout << answer.first << " " << answer.second << "\n"; //결과 출력 | ||
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. endl로 하는 편이 더 좋습니다! |
||
|
||
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.
P2
마찬가지로 알튜비튜에서는 정말 필요한 경우를 제외하고는 전역변수 사용을 지양하고 있습니다! 이 경우에는 메인 함수 안에서 배열을 선언하고 인자를 넘겨주면 충분히 문제를 해결할 수 있을 것 같아요!