Make Unreal REAL.
article thumbnail
Level 1. 키패드 누르기

 

 

어렵지도 않고 보자마자 어떻게 구현해야 할지 감이 잡혀서 꽤 재밌는 문제였다.

 

이차원 좌표를 저장하는 Pos 구조체를 만들고 연산자 오버로딩을 이용해 각 번호의 거리를 계산하는 함수를 구현해 해결했다.

 

#include <iostream>
#include <vector>

using namespace std;

struct Pos
{
    int x;
    int y;

    int operator - (const Pos& p)
    {
        return abs(x - p.x) + abs(y - p.y);
    }
};

Pos position(int key)
{
    key = (key == 0) ? 11 : key;

    return Pos{--key % 3, key / 3};
}

int distance(int x, int y)
{
    return position(x) - position(y);
}

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

    for (int num : numbers)
    {
        switch (num)
        {
        case 1: case 4: case 7:
            L = num;
            answer += "L";
            break;
        case 3: case 6: case 9:
            R = num;
            answer += "R";
            break;
        case 2: case 5: case 8: case 0:
        {
            int distL = distance(L, num);
            int distR = distance(R, num);

            if (distL < distR)
            {
                L = num;
                answer += "L";
            }
            else if (distL > distR)
            {
                R = num;
                answer += "R";
            }
            else if (hand == "left")
            {
                L = num;
                answer += "L";
            }
            else if (hand == "right")
            {
                R = num;
                answer += "R";
            }
            break;
        }
        default:
            break;
        }
    }

    return answer;
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 1. 신규 아이디 추천  (0) 2023.03.05
Level 1. 크레인 인형뽑기 게임  (0) 2023.03.04
Level 1. [1차] 다트 게임  (0) 2023.03.02
Level 1. 체육복  (0) 2023.03.01
Level 1. 문자열 나누기  (0) 2023.02.26
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그