본문 바로가기
프로그래밍/개발 이야기

[C++] 2020 카카오 인턴십 for Tech developers 1번문제

by JR2 2021. 5. 8.

tech.kakao.com/2020/07/01/2020-internship-test/

 

2020 카카오 인턴십 for Tech developers 문제해설

2020년 카카오의 여름 인턴십이 시작 되었습니다.여름 인턴십의 첫번째 관문인 코딩 테스트가 2020년 5월 9일 오후 2시부터 6시까지 진행되었는데요, 온라인으로 진행되었기 때문에 코로나19로부터

tech.kakao.com

 

1번 문제 같은 경우는 간단하지만, 헷갈릴 요소들이 몇 개 있다.

 

우선 나는 저런식의 API구조가 많이 익숙하지는 않기 때문에 vector부터 알아보았다.

 

결국 문제는 어떻게 푸냐,

너무 간단해서 설명하기 귀찮다.

근데 한 가지 실수 했던점만 꼽자면,

1 2 3
4 5 6
7 8 9
10 11 12

여기서, 내가 선택하려는 번호와, 내 손의 위치를 구하는 공식은

int l = numbers[i] - l_last;
int r = numbers[i] - (r_last);

if (l < 0) { l = l * -1; }
if (r < 0) { r = r * -1; }

l = (l / 3) + (l % 3);
r = (r / 3) + (r % 3);

이 부분이다. 내가 했었던 실수는 r_last - 2 를 했었다는 것이다. 굳이 그럴 필요가 없었다.

그리고 math.h 을 추가해서 abs(l), abs(r) 이렇게 해줬어도 됐었다.

자세한건 m.blog.naver.com/PostView.nhn?blogId=highkrs&logNo=220216096032&proxyReferer=https:%2F%2Fwww.google.com%2F 참조

 

소스코드

#include <string>
#include <vector>

using namespace std;

string solution(vector<int> numbers, string hand) {
	string answer = "";

	int l_last = 10;
	int r_last = 12;
	for (int i = 0; i < numbers.size(); i++)
	{
		if (numbers[i] == 0)
			numbers[i] = 11;
		if (numbers[i] % 3 == 0)
		{
			answer[i] = 'R';
			r_last = numbers[i];
		}
		else if (numbers[i] % 3 == 1)
		{
			answer += 'L';
			l_last = numbers[i];
		}
		else //2
		{

			int l = numbers[i] - l_last;
			int r = numbers[i] - (r_last);

			if (l < 0) { l = l * -1; }
			if (r < 0) { r = r * -1; }

			l = (l / 3) + (l % 3);
			r = (r / 3) + (r % 3);


			if (l > r) { answer += 'R'; r_last = numbers[i]; }
			else if (l < r) { answer += 'L'; l_last = numbers[i]; }
			else
			{
				if (hand == "left")
				{
					answer += 'L';
					l_last = numbers[i];
				}
				else // r
				{
					answer += 'R';
					r_last = numbers[i];
				}
			}
		}
	}
	return answer;
}

댓글