프로그래머스 푸드파이터를 푸는데 입출력결과가 이해가 안되서 한참을 보다가 이해를 한 후 문제를 풀었다. 다른 사람들의 풀이가 궁금해서 보는데 아니나 다를까 상상도 못한 방식으로 문제를 푼 사람들을 보게 되었고 그들의 사고방식을 배워보고자 남긴다.
string::insert(size_t index, size_type count, char ch) 를 활용했는데
insert 함수는 원하는 인덱스에 원하는 문자열을 개수만큼 넣는 방식이다.
std::string solution(std::vector<int> food)
{
// 1,3,4,6
std::string answer;
size_t size = food.size();
for (int i = 1; i < food.size(); ++i)
{
answer.insert(answer.size() >> 1, food[i] - (food[i] & 1), '0' + i);
}
size = answer.size() >> 1;
std::cout << size << std::endl;
answer.insert(answer.size() >> 1, 1, '0');
return answer;
}
해당 풀이는 다음과 같이 정의된다 insert함수는 내가 다뤄본적 없는 함수이기에 코드를 이해하는데 시간을 들이게 되었다.
1,3,4,6 이 들어왔을 경우 3부터 시작을하며 사이즈의 중간부터 insert를 통해 양쪽의 값을 늘리는 방식의 알고리즘이다.
answer의 중간 index는 size() >> 1 을통해 찾으며
카운트가 되어야 할 숫자는 단순히 생각하면 food[i] / 2 * 2가 되어야 한다.
그러나 단순히 들어온 숫자가 홀수면 1을 빼고 짝수면 빼지 않는 식을 만들 수도 있을 것이다.
food[i] - (food[i] & 1)을 통해 해당 로직을 완성한다.
for문 한번에 이걸 끝낼 생각을 하다니 정말 대단한 사람이다..ㄷㄷ나도 비트연산자를 적극활용해서 문제를 풀도록 노력해야겠다.
- 콘솔 과제에 Scene개념을 집어넣었다. 이제 자유롭게 화면전환이 가능하다.
- 버퍼에 입력 시스템을 구현했다. cin >> 을 이용해서 입력이 안되었기 때문에 입력을 할 수 있게 구조를 바꾸어야 했다.
- 메뉴를 선택하는 로직을 대폭 수정하였다.
3.1 선택한 인덱스의 라인에 색상을 바꾸도록 구조를 추가했다.- 검색기능 구현
4.1 구현은 되있었지만 테스트 용도를 제외하고는 화면에 출력할 수 가 없었다.