해결된 질문
작성
·
37
·
수정됨
0
풀긴 했는데 메모리랑 시간 사용량이 어마어마 해서요..
실전이 얼마 안남아서 실전에서도 이렇게 풀어도 되나 싶어서 여쭤봅니다...
제가 파악한 큰돌님과 저의 코드 차이점은
저는 연산 기호를 사용할 수 있냐는 기준을
카운팅 배열을 쓰고 원복하고 했던 거랑
수식들을 계산할 때, 스택에 넣고 계산하는 방식을 쓴 게 가장 큰 차이인 것 같습니다.
그리고 실제 문제로 이런 문제가 나온다면 몇 분 안에 풀어야 될지도 궁금합니다..! 저는 40~50분 안에 풀면 안정권이라 생각했는데 큰돌님 의견이 궁금하네욤!
답변 2
0
안녕하세요 자르트님 ㅎㅎ
그리고 실제 문제로 이런 문제가 나온다면 몇 분 안에 풀어야 될지도 궁금합니다..! 저는 40~50분 안에 풀면 안정권이라 생각했는데 큰돌님 의견이 궁금하네욤!
-> 이런 문제는 10분안에 풀어야 합니다. 그러나, 이건 이상적인 것이구요.
코테 시간과 문제수를 보고 전략을 세워야 합니다.
시간이 3시간이 주어지고 5문제 풀어야 한다면 -> 처음 3문제는 1시간안에 푼다 나머지 2문제를 2시간안에 푼다. 이런식으로 대략의 시간제한을 둬서 푸시는게 좋습니다.
실전이 얼마 안남아서 실전에서도 이렇게 풀어도 되나 싶어서 여쭤봅니다...
-> 로직의 경우 잘 짜셨습니다. ㅎㅎ 이렇게 짜도 괜찮긴 하죠. 다만 개선할 부분이 있어서 이부분 참고해서 다시 짜는 연습해주세요.
코드리뷰를 드리면 다음과 같습니다.
stack의 사용이 불필요해보입니다. + 연산자 조합함수의 경우 좀 더 최적화시킬 수 있습니다. + call by reference로 받는게 더 좋습니다.
제가 한번 다듬어봤는데요. ㅎㅎ
참고해주세요
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, _max = LLONG_MIN, _min = LLONG_MAX;
ll a[14];
ll yunsan[4]; // + - * /
vector<vector<ll>> v;
void combi(vector<ll>& b) {
if (b.size() == n - 1) {
v.push_back(b);
return;
}
for (ll i = 0; i < 4; i++) {
if (yunsan[i] > 0) {
yunsan[i]--;
b.push_back(i);
combi(b);
b.pop_back();
yunsan[i]++;
}
}
}
ll cal(vector<ll>& oper) {
ll result = a[0];
for (ll i = 0; i < oper.size(); i++) {
if (oper[i] == 0)
result += a[i + 1];
else if (oper[i] == 1)
result -= a[i + 1];
else if (oper[i] == 2)
result *= a[i + 1];
else if (oper[i] == 3)
result /= a[i + 1];
}
return result;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
for (ll i = 0; i < n; i++) cin >> a[i];
for (ll i = 0; i < 4; i++) cin >> yunsan[i];
vector<ll> temp;
combi(temp);
for (vector<ll>& b : v) {
ll value = cal(b);
_max = max(_max, value);
_min = min(_min, value);
}
cout << _max << '\n';
cout << _min << '\n';
}
이제 곧 코테이신가요? 화이팅입니다 자르트님!! 꼭 뿌셔버리고 오세요
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 자르트님 질문에 대해 답변 드리겠습니다.
질문 주신 내용은 코딩 테스트에서의 문제 해결 전략에 관한 것으로 보입니다. 특히, 메모리와 시간 최적화가 중요한 점에 대해 고민하고 계신 것 같습니다. 코딩 테스트에서 시간과 메모리 사용량은 매우 중요한 부분이기 때문에, 최적화된 코드를 짜는 것이 필요합니다.
큰돌님의 코드와 비교하여 말씀하신 카운팅 배열 및 수식 계산 방법이 메모리와 시간에 영향을 미쳤을 수 있습니다. 카운팅 배열을 사용하는 방법은 간단하고 직관적이지만, 문제의 크기에 따라 메모리 소모가 클 수 있습니다. 반면, 스택을 활용한 계산 방식은 좀 더 효율적일 수 있으나, 구현이 더 복잡할 수 있습니다.
실전 코딩 테스트에서는 일반적으로 문제를 해결하는 데 20~40분을 목표로 하십니다. 그러나, 문제의 난이도에 따라 시간은 달라질 수 있으며, 문제의 정확성과 효율성도 중요하니, 그런 부분도 고려하셔야 합니다. 특히 어려운 문제일 경우에는 40~50분 정도까지도 시간이 걸릴 수 있습니다.
유사한 질문에 대해 더 깊이 있는 설명이나 토론이 이루어진 게시물을 참고하시기 바랍니다:
해당 링크에서 비슷한 접근 방법과 최적화 팁을 확인하실 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.