-
Notifications
You must be signed in to change notification settings - Fork 1
31-wnsmir #125
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
Conversation
9kyo-hwang
left a comment
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.
์ด๊ฒ๋ 2๋ ์ ์ ์ํ์๊ฐ ํ์์๊ตฐ์... ๊ณผ๊ฑฐ์ ์ ์๊ณ ๋ฆฌ์ฆ๋ง ํ๋ฃจ์ข ์ผ ํ๋ ๋ด ๋๋ค.
๊ฒฐ๊ตญ ๊ฐ์ฅ ๋จผ ์ง๋ถํฐ ๋ฐฐ๋ฌ/์๊ฑฐ๋ฅผ ํด์ผํ๋ ์ ์ ๋ค๋ค ์บ์นํ์ค ๊ฒ ๊ฐ์ต๋๋ค. ์ ๋ ์ด๊ฑฐ๋ฅผ ๋ณด๊ณ stack ์๋ฃ๊ตฌ์กฐ๊ฐ ์ ํฉํ๋ค๋ ์๊ฐ์ด ๋ค๋๋ผ๊ตฌ์.
- ๋งจ ๋ค๋ถํฐ cap๋งํผ ๋ฐฐ๋ฌํ๊ธฐ
- ๋งจ ๋ค๋ถํฐ cap๋งํผ ์๊ฑฐํ๊ธฐ
- 1, 2 ๊ณผ์ ์ ๋ชจ๋ ์ง์ด ์๊ตฌํ๋ ๋ฌผ๋์ ์ณ๋ผ ๋๊น์ง ๋ฐ๋ณต, ๊ทธ ๊ณผ์ ์์ ๋ฐฐ๋ฌ/์๊ฑฐ ์ค ๋ ๊ธด ๊ฑฐ๋ฆฌ๋ฅผ ๋์
#include <string>
#include <vector>
using namespace std;
long long solution(int cap, int n, vector<int> deliveries, vector<int> pickups) {
// ์๊ตฌ ๊ฐ์๊ฐ 0์ธ ๊ฑด ๋ฏธ๋ฆฌ ์ณ๋
๋๋ค.
while(!deliveries.empty() && deliveries.back() == 0) deliveries.pop_back();
while(!pickups.empty() && pickups.back() == 0) pickups.pop_back();
size_t answer = max(deliveries.size(), pickups.size()); // ์ต์ด ์ด๋ ๊ฑฐ๋ฆฌ๋ ๋ ์ค ๋ ๊ธด ๊ฒ
while(!deliveries.empty() || !pickups.empty()) {
size_t capacity = 0;
while(!deliveries.empty()) { // ์ฐ์ ๋ฐฐ๋ฌ์ ์ณ๋
๋๋ค.
capacity += deliveries.back();
deliveries.pop_back();
if(capacity > cap) { // ์ด๊ณผ๋ถ์ ๋ค์ ๋งจ ๋์ ์ฝ์
ํ์ฌ ๋ค์ ๋ฃจํ์์ ์ฒ๋ฆฌ
deliveries.emplace_back(capacity - cap);
break;
}
}
capacity = 0;
while(!pickups.empty()) { // ๋ค์์ ์๊ฑฐ
capacity += pickups.back();
pickups.pop_back();
if(capacity > cap) { // ๋์ผํ๊ฒ ์ด๊ณผ๋ถ์ ๋ค์ ๋งจ ๋์ ์ฝ์
ํ์ฌ ๋ค์ ๋ฃจํ์์ ์ฒ๋ฆฌ
pickups.emplace_back(capacity - cap);
break;
}
}
// ๋ ์ค ๋ค์ ์ด๋๊ฑฐ๋ฆฌ๊ฐ ๋ ๊ธด ๊ฒ์ ๋์
answer += max(deliveries.size(), pickups.size());
}
// ์๋ณต์ด๋ฏ๋ก 2๋ฐฐ
return answer * 2;
}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.
์ ๋ ๊ตํฉ๋์ ์ถ์ฒ์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ์์ ์ ํ์ด๋ณธ ๊ฒ ๊ฐ์์.
๊ทธ๋๋ ๋ค์ ํ ๋ฒ ํ์ด๋ณด๊ณ ์ถ์ด์ ์๋ํด๋ดค์ต๋๋ค.
์ถ๋ฐํ ๋ ์ต๋๋ก ์ ๋ถ ๋์ผ๋ฉด์ ๊ฐ๊ณ , ๋์์ฌ๋ ์ต๋๋ก ์ ๋ถ ๋ค๊ณ ์ค๋ ๋ฐฉ์์ ์๊ฐํ๋ฉฐ ๊ตฌํํ์ต๋๋ค.
์... ์ ๋ ์ค์ฉ๋ ์ฒ๋ผ (์ธ๋ฑ์ค๋ก ๋ฐฐ์ด์ ์ ๊ทผํ๋ ๋ฐฉ์์ผ๋ก) ์ฝ๋๋ฅผ ๊ฑฐ์ ๋น์ทํ๊ฒ ์งฐ๋๋ฐ
์ผ๋ถ ์ผ์ด์ค์์ ํ๋ฆฌ๋๋ผ๊ตฌ์...
๊ทธ๋์ ๊ณผ๊ฑฐ์ ๊ธฐ์ต์ ๋๋ฌ์ด์ ์คํ์ผ๋ก ํ์ด๋ดค์ต๋๋ค.
๊ทธ๋ฌ๋๋ ํ๋ฆฌ๋๊ตฐ์...
๊ตฌํ์ ์ฐธ ์ ๊ธฐํฉ๋๋ค.
์ฌ๊ณ ๋ ฅ๊ณผ ์ง์ค๋ ฅ์ ๋๋ฆฌ๊ธฐ์๋ ์ข์ ์ ํ์ธ๊ฒ ๊ฐ๋ค์.
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
void move(stack<int>& s, int capacity) {
int carry = 0;
while (!s.empty()) {
int cur = s.top();
s.pop();
// ํ์ฌ ๊ฐ๋ฅํ ๋งํผ๋ง ๋๊ณ ๊ฐ๊ธฐ or ๋ค๊ณ ๊ฐ๊ธฐ
if (carry + cur > capacity) {
s.push(cur - (capacity - carry));
break;
}
// ํ์ฌ์ ๋ค ๋๊ณ ๊ฐ๊ธฐ or ๋ค๊ณ ๊ฐ๊ธฐ
carry += cur;
}
}
long long solution(int cap, int n, vector<int> deliveries_, vector<int> pickups_) {
// ์คํ์ผ๋ก ํํ
stack<int> deliveries, pickups;
for (int d : deliveries_) deliveries.push(d);
for (int p : pickups_) pickups.push(p);
// ๋ฐฐ๋ฌ๊ณผ ์๊ฑฐ
long long answer = 0;
while (!deliveries.empty() || !pickups.empty()) {
while (!deliveries.empty() && deliveries.top() == 0) deliveries.pop();
while (!pickups.empty() && pickups.top() == 0) pickups.pop();
answer += max(deliveries.size(), pickups.size());
move(deliveries, cap);
move(pickups, cap);
}
return answer * 2;
}+) ์ ๊ทธ๋ฆฌ๊ณ ๊ตํฉ๋์ solutionํจ์ return ๋ฐฉ์์ด ๋ง์์ ๋ค์ด์ ๋ฐ๋ผํด๋ดค์ต๋๋ค
๋ฌธ์ ์์ ์๊ตฌํ๋ answer์ด ๋ฌด์กฐ๊ฑด ์๋ณต์ด์ด์ ๊ฐ๋ฅํ ํธ๋ฆญ๊ฐ๋ค์.
++ ) ์ ๊ทธ๋ฆฌ๊ณ ์คํ์ top == 0์ธ ๋
์๋ค์ ๋บด์ฃผ๋ ์ด์ ๋ ์๋ณต ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ ๋ ๋ฌธ์ ๊ฐ ๋๊ธฐ ๋๋ฌธ์
๋๋ค!
moveํจ์๋ด์์๋ 0์ด๋ผ๋ ์ ์๋์ํจ์ผ๋ก ์ํด์ค๋ ๋๋ ์ถ์ง๋ง,
๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ ๋๋ top ==0 ์ธ ๋
์์ด size๋ฅผ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ ๋นผ์ฃผ์ด์ผํฉ๋๋ค.
์ค์ ๋ก ์ ๋ while๋ฌธ์ ์์ ๊ณ ์ ์ถํด๋ณด๋ฉด ๋ฑ 1๊ฐ์ ์ผ์ด์ค์์ ํ๋ ธ๋ค๊ณ ๋น๋๋ค.
kokeunho
left a comment
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.
์ ๋ ๊ธํ๊ฒ ํ์ด์ ๊ทธ๋ฐ์ง ํ์ด๋ฅผ ๋ ์ฌ๋ฆฌ์ง ๋ชปํ์ต๋๋ค;
๋ณต์กํ๊ฒ ์๊ฐํด์ ๊ทธ๋ฐ๊ฑฐ ๊ฐ๊ธฐ๋ ํ๊ณ ์.
๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์ข ๋ ๋ง์ด ํ์ด๋ด์ผํ ๊ฒ ๊ฐ์ต๋๋ค.
์ ๋ฒ ์ค์ฉ๋ PR๋ถํฐ ๋๋ ๊ฒ์ธ๋ฐ ์ ๊ฐ ์ด๋ฐ ์ ํ์ ์ฝํ ๊ฒ ๊ฐ์์.
์คํ์ ์ฌ์ฉํ ๋ค๋ฅธ ๋ถ๋ค๊ณผ ๋ฌ๋ฆฌ ๋ฐ๋ก ์ธ๋ฑ์ค ๋ณ์๋ฅผ ์ฌ์ฉํ ๊ฒ๋ง ๋นผ๋ฉด
ํ์ด๋ ๋์ผํฉ๋๋ค.
์๊ณ ํ์ จ์ต๋๋ค.
Details
import java.util.*;
class Solution {
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = 0;
int dIdx = n - 1;
int pIdx = n - 1;
while (dIdx >= 0 || pIdx >= 0) {
while (dIdx >= 0 && deliveries[dIdx] == 0) dIdx--;
while (pIdx >= 0 && pickups[pIdx] == 0) pIdx--;
int distance = Math.max(dIdx, pIdx);
answer += (long)(distance+1) * 2;
int deliverCap = cap;
while (cap > 0 && dIdx >= 0) {
if (deliverCap >= deliveries[dIdx]) {
deliverCap -= deliveries[dIdx];
deliveries[dIdx] = 0;
dIdx--;
} else {
deliveries[dIdx] -= deliverCap;
break;
}
}
int pickupCap = cap;
while (pickupCap > 0 && pIdx >= 0) {
if (pickupCap >= pickups[pIdx]) {
pickupCap -= pickups[pIdx];
pickups[pIdx] = 0;
pIdx--;
} else {
pickups[pIdx] -= pickupCap;
break;
}
}
}
return answer;
}
}
g0rnn
left a comment
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.
์ฌ๋ฐ๋ ๋ฌธ์ ๋ค์ ๋ญ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ธ ๊ฐ๋ ์ด ํ์ํ๋ค๊ธฐ๋ณด๋ค ์ฝ๊ฐ์ ์ผ์ค๋ ๊ตฌ์ํ๊ธฐ ์ด๋ ค์ด ๋ก์ง์ ์ค์์์ด ๊ตฌํํด์ผํด์ ๋ ์ฌ๋ฐ์๋๊ฑฐ ๊ฐ์์.
์ ๋ ๋ค๋ฅธ๋ถ๋ค์ฒ๋ผ ๊ฐ์ฅ ๋ค์์๋ถํฐ ๋ฐฐ๋ฌํ๋ฉฐ ์์ํ๋ คํ์๋๋ค. ๊ทธ๋์ for(int i = n-1; i >= 0; i--)๋ก ํ๋๋ ์๊ฐ์ด๊ณผ๊ฐ ๋๋๊ตฐ์.. ์๊ฐ์ด๊ณผ๋ฅผ ์์ํ์ง ๋ชปํ ์ ์ค์์
๋๋ค..
java code
class Solution {
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = 0;
int totalD = 0;
int totalP = 0;
int farHome = 0;
for (int i = 0; i < n; i++) {
totalD += deliveries[i];
totalP += pickups[i];
if (deliveries[i] != 0 || pickups[i] != 0) {
farHome = i;
}
}
while (!(totalD == 0 && totalP == 0)) {
int tempDeliverCap = 0;
int tempPickUpCap = 0;
int stayIdx = -1;
for (int i = n-1; i >= 0; i--) {
if (tempDeliverCap < cap && deliveries[i] != 0) {
// ๋ชจ๋ ๋ด๋ ค๋๊ธฐ
// cap๋ณด๋ค ํฌ๋ฉด diff๋งํผ ๋๋ ค๋๊ณ temp๋ ์์
int curDeliverCap = cap - tempDeliverCap;
if (deliveries[i] - curDeliverCap >= 0) {
tempDeliverCap += curDeliverCap;
deliveries[i] -= curDeliverCap;// ๊ฐ์ ธ๊ฐ๋งํผ
} else {
tempDeliverCap += deliveries[i];
deliveries[i] = 0;
}
if (stayIdx < i) {
stayIdx = i;
}
}
if (tempPickUpCap < cap && pickups[i] != 0) {
int curPickUpCap = cap - tempPickUpCap;
if (pickups[i] - curPickUpCap >= 0) {
tempPickUpCap += curPickUpCap;
pickups[i] -= curPickUpCap;
} else {
tempPickUpCap += pickups[i];
pickups[i] = 0;
}
if (stayIdx < i) {
stayIdx = i;
}
}
if (tempDeliverCap == cap && tempPickUpCap == cap) {
break;
}
}
answer += (stayIdx+1) * 2;
totalD -= tempDeliverCap;
totalP -= tempPickUpCap;
}
return answer;
}
}
(7์ด๊ฐ ์ง๋๋ ์ฑ๊ณต์ธ๊ฑธ๋ก ๋ณด์ ์๊ฐ์ ํ์ 10์ด๋ก ๋๋ํ๊ตฐ์)
์๋ฌดํผ ์๊ฐ์ด๊ณผ ํ ๋ค๋ฅธ ๋ถ๋ค์ ์ฝ๋์ ์งํผํฐ์ ๋์์ ์ด์ง ๋ฐ์ ์ ์ฝ๋์ ๋จ์ ์ ๊ณ ์ณค์ต๋๋ค.
class Solution {
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = 0;
int d = n - 1;
int p = n - 1;
while (true) {
while (d >= 0 && deliveries[d] == 0) d--;
while (p >= 0 && pickups[p] == 0) p--;
if (d < 0 && p < 0) break;
answer += (Math.max(d, p) * 2L) + 2L;
int capD = cap;
// ํ์ฌ ์ฉ๋์ ๋ค ์ฑ์ธ ๋๊น์ง ๋ฐ๋ณต
while (d >= 0 && capD > 0) {
if (deliveries[d] - capD <= 0) {
capD -= deliveries[d];
deliveries[d] = 0;
d--;
} else {
deliveries[d] -= capD;
capD = 0;
}
}
int capP = cap;
while (p >= 0 && capP > 0) {
if (pickups[p] - capP <= 0) {
capP -= pickups[p];
pickups[p] = 0;
p--;
} else {
pickups[p] -= capP;
capP = 0;
}
}
}
return answer;
}
}
๐ ๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/150369
โ๏ธ ์์๋ ์๊ฐ
1.5h
โจ ์๋ ์ฝ๋
๊ทธ๋ฆฌ๋ ๋ฌธ์ ์ ๋๋ค.
์ต๋จ๊ฑฐ๋ฆฌ? ์์ด? ์๊ฐํด๋ดค์ง๋ง ๋งค๋ฒ ์ฐธ๊ณ ํด์ผํ๋ ๊ธฐ์ค์ด ๋ฌ๋ผ์ ธ ๊ทธ๋ฆฌ๋์์ ์ง๊ฐํ์ต๋๋ค.
๋ฌธ์ ๋ฅผ ์์ฝ์ด๋ณด๋ฉด ๊ฒฐ๊ตญ ํ๋ฒ ๋ค๋ ์ค๋๊ธธ์ ์ต๋ํ ๋ฉ๋ฆฌ์๋์ง๋ถํฐ ๋ฐฐ์ก/์๊ฑฐ๋ฅผ ํด์ผํฉ๋๋ค. ๋จผ๊ธธ์ ๋ค์๊ฐ์๋ก ์ค์ฒฉํด์ ๊ฐ๋๊ธธ์ด ๋์ด๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ ํ๋ฒ ์ถ๋ฐํ ๋ ๊ฐ์ฅ๋จผ ์๊ฑฐ ํน์ ๋ฐฐ๋ฌํ ์ง์ ์ ํ๊ณ , ๊ทธ ๊ฑฐ๋ฆฌ์ ๋๋ฐฐ(์๋ณต)์ ๋ต์ ์ถ๊ฐํด์ค๋๋ค.
๋์ฐฉํ ์ง์ cap์ ์ฌ์ ๊ฐ ๋๋๋งํผ ๋ฐฐ์ก/์๊ฑฐ ํด์ฃผ๊ณ , ๋ค์์ง์ผ๋ก ๋์ด๊ฐ๋๋ค.
์ด๋ฅผ ๋ฐฐ์ก, ์๊ฑฐ๋ฌผ๋์ด 0์ด๋ ๋๊น์ง ๋ฐ๋ณตํด์ฃผ๋ฉด ํ๋ฆฝ๋๋ค.
๋ญ๊ฐ ์ด๋ ค์ด๋ฌธ์ ๋ ์๋๋ฐ ์ ๋งคํ๊ฑธ ํ์คํ ๊ตฌํํจ์ ์์ด์ ๊น๋ค๋ก์ด ์ ํ์ด ๊ทธ๋ฆฌ๋์ธ๊ฒ ๊ฐ์ต๋๋ค.