• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

클래스 내부에 있는 vector 리턴값 출력하는 방법에 대해서 질문드립니다~

22.01.23 13:30 작성 조회수 586

0

#include <iostream>

#include <vector>

 

using namespace std;

 

class Solution {

public:

    vector<int> twoSum(vector<int>& nums, int target)

    {

        vector<int> res;

        for (int i = 0; i < nums.size(); i++)

        {

            for (int j = i + 1; j <= nums.size()-1; j++)

            {

                if (nums[i] + nums[j] == target)

                {

                    res.push_back(i);

                    res.push_back(j);

                    return res;

                }

            }

        }

        return res;

    }

 

};

 

 

int main()

{

    Solution s;

    

    vector<int> nums = { 2, 7, 12, 15 };

    int target = 9;

 

    cout << s.twoSum(nums, target) << endl;

 

    return 0;

 

}

릿코드 알고리즘 첫번째 문제입니다. 배열을 선언하고 for문으로 배열 인자값을 찾아서 서로 더해 타겟값을 구하는 문제입니다.

제가 구현한 코드인데, 인스턴스를 만들고 함수에 값을 대입하고 cout으로 출력을 하려고 했는데 코딩 에러가 났습니다 ㅠ

구글에 검색해봐도 방법이 없어서 부족한 실력이지만... 양해를 구하고 강사님께 질문 한번 드립니다.

 

 

답변 2

·

답변을 작성해보세요.

2

강민철님의 프로필

강민철

2022.01.24

안녕하세요,

음.. 어떤 문제인지 정확히 몰라 우선 오류만 해결해드리자면,

 

만일  출력하시고자  하는 값이 두 수를 더했을 때 9가 나오는 "인덱스"라면

아래와 같은 방식으로 벡터의 인덱스를 출력할 수 있겠습니다.

 

int main()
{
	Solution s;

	vector<int> nums = { 12, 7, 2, 15 };
	int target = 9;
	
	vector<int> answer = s.twoSum(nums, target);
	for (int i : answer)
		cout << i << ' ';
	
	return 0;
}

 

그리고 만일 출력하시고자 하는 값이 두 수를 더했을 때 9가 나오는 "값"이라면

이렇게 하시면 되겠습니다.

int main()
{
	Solution s;

	vector<int> nums = { 12, 7, 2, 15 };
	
	int target = 9;
	
	vector<int> answer = s.twoSum(nums, target);
	for (int i : answer)
		cout << nums[i] << ' ';
	
	return 0;
}

(시도해보셔서 아시겠지만,)

vector 변수를 아래와 같이 cout 한다고 해당 값에 담긴 값들이 출력되지는 않습니다.

 

vector<int> nums = { 12, 7, 2, 15 };
cout << nums << endl;

 

그래서 벡터의 값을 출력하려면 for each 등을 이용해 벡터를 순회하셔야 합니다.

 

그리고 작은 팁을 드리자면, 

개인적으로 릿코드를 비롯한 각종 알고리즘 문제, 코딩 테스트들은

단순히 알고리즘과 자료구조만을 평가하는 문제(시험)는 아니라고 봅니다.

 

"프로그래밍 언어 문법 안에서 자유롭게 코드를 작성할 수 있는가"

또한 평가하는 시험이라고 생각해요.

 

그렇기에 알고리즘 문제를 쉽게 풀기 위해서는

특정 언어에 대한 기본적인 문법에서 모르는 게 없는 상태가 되어야 된다고 생각합니다.

 

적어도 C++ 기초 문법은 모르는 게 없어야 코드 안에서 이런 저런 시도도 해 볼 수 있고, 

디버깅도 빠르게 할 수 있을 테니까요.

 

그렇기에 지금처럼 문제를 푸시다 막혔을 때는, 이 강의에서 

막힌 개념들을 다시 한 번 보시면서 문제를 해결해보시기를 추천드립니다.

(한 번 보셨던 강의더라도 다시 보시면 새롭게 얻어가는게 많을 거에요!)

 

이게 처음에는 오래 걸릴 수 있지만,

속도가 붙기 시작하면 누구보다 빠르게, 또 탄탄하게 실력을 키울 수 있는 방식인 듯합니다.

 

만일 이 강의를 보시고도 궁금증이 풀리지 않으신다면 언제든지 최선을 다해 도와드리겠습니다.

 

감사합니다 :)

 

0

km님의 프로필

km

질문자

2022.01.28

정말 감사합니다.

 

강의 내용을 다시한번 복습해보겠습니다!