인프런 커뮤니티 질문&답변

자르트님의 프로필 이미지
자르트

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

5-S

5 - S 실전 관련 질문 드립니다..!

해결된 질문

작성

·

37

·

수정됨

0

풀긴 했는데 메모리랑 시간 사용량이 어마어마 해서요..

실전이 얼마 안남아서 실전에서도 이렇게 풀어도 되나 싶어서 여쭤봅니다...

 

제가 파악한 큰돌님과 저의 코드 차이점은

저는 연산 기호를 사용할 수 있냐는 기준을

카운팅 배열을 쓰고 원복하고 했던 거랑

수식들을 계산할 때, 스택에 넣고 계산하는 방식을 쓴 게 가장 큰 차이인 것 같습니다.

image.png

그리고 실제 문제로 이런 문제가 나온다면 몇 분 안에 풀어야 될지도 궁금합니다..! 저는 40~50분 안에 풀면 안정권이라 생각했는데 큰돌님 의견이 궁금하네욤!


http://boj.kr/229b1729870841dfa19aaa13c1760073

답변 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분 정도까지도 시간이 걸릴 수 있습니다.

유사한 질문에 대해 더 깊이 있는 설명이나 토론이 이루어진 게시물을 참고하시기 바랍니다:

해당 링크에서 비슷한 접근 방법과 최적화 팁을 확인하실 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

자르트님의 프로필 이미지
자르트

작성한 질문수

질문하기