tech.kakao.com/2020/07/01/2020-internship-test/
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) 이렇게 해줬어도 됐었다.
소스코드
#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;
}
'프로그래밍 > 개발 이야기' 카테고리의 다른 글
[백준] 21313번 문제풀이 (0) | 2021.05.14 |
---|---|
[C++] 2020 카카오 인턴십 for Tech developers 2번문제 (0) | 2021.05.08 |
[백준] 5585번 문제풀이 (2) | 2021.04.09 |
[백준] 12904번 문제풀이 (0) | 2021.04.09 |
[백준] 1715번 문제풀이 (0) | 2021.04.09 |
댓글