반응형

 

 

 

 

로그 출력

- 다음과 같이 작성하면 된다. (예시에서 Value는 지역변수)

//카테고리, 로깅수준, 형식(인자)
UE_LOG(LogTemp, Warning, TEXT("UpDown %f"), Value);

 

결과

 

 

 

 

디버깅 하기

- 기존에 켜둔 언리얼 에디터를 종료한다.

- 비주얼 스튜디오에서 솔루션 구성을 'DebugGame Editor''Development Editor'로 변경한 뒤, 디버거를 실행한다.

- 디버거를 실행하면 언리얼 에디터가 실행되는데, 언리얼 에디터에서 플레이를 하면 브레이크 포인트를 찍은 곳에 걸리는 것을 확인할 수 있다.

 

결과

- 다음과 같이 브레이크 포인트가 걸리는 것을 확인할 수 있다.

 

 

 

 

※※※ 디버깅 시 에러가 나는 경우 다음 포스팅 참고

 

 

[비주얼스튜디오] UE4.exe 프로그램을 시작할 수 없습니다.

언리얼 디버깅을 위해 비주얼 스튜디오에서 디버거를 실행하면 '~\UE4.exe' 프로그램을 시작할 수 없습니다. 라는 에러창을 볼 수 있다. 어려운 문제는 아니고 시작 프로젝트만 설정해주면 된다.

srdeveloper.tistory.com

 

 

 

 

반응형
반응형

 

 

 

 

유니티 엔진의 Input 클래스에는 touch라는 구조체가 존재한다. 이 touch라는 구조체의 정보를 바탕으로 모바일 환경에서의 제스처기능을 적용해 카메라를 이동하거나 줌 인/아웃 기능을 구현할 수 있다.

 

 

카메라 이동

using UnityEngine

enum GESTURE
{
    MOVE = 1,
    ZOOM,
}

private void MoveCam()
{
    if (Input.touchCount == (int)GESTURE.MOVE)
    {
        Touch touch = Input.touches[0];
        Camera.main.transform.position = new Vector3(
            Camera.main.transform.position.x - touch.deltaPosition.x,
            Camera.main.transform.position.y - touch.deltaPosition.y,
            Camera.main.transform.position.z);
    }
}
  • Touch 구조체에는 deltaPosition이 존재하는데 이전 프레임과 현재 프레임 사이의 움직인 벡터 값을 받을 수 있다.
  • 이 벡터 값을 이용해서 카메라의 위치를 변경해주면 된다.
  • deltaPosition을 바로 적용해주면 카메라가 엄청 빠르게 움직이니 해당 값에 speed(float) 값을 곱해서 적용해준다.
  • 간단하게 보여주기 위해 작성된 코드로, Camera.main의 카메라 클래스는 캐싱해서 사용하는게 최적화에 도움이 된다.

 

 

 

카메라 줌 인/아웃

private void ZoomCam()
{
    if (Input.touchCount == (int)TOUCH.ZOOM)
    {
        Touch touch_1 = Input.touches[0];
        Touch touch_2 = Input.touches[1];

        //이전 프레임의 터치 좌표를 구한다.
        Vector2 t1PrevPos = touch_1.position - touch_1.deltaPosition;
        Vector2 t2PrevPos = touch_2.position - touch_2.deltaPosition;

        //이전 프레임과 현재 프레임 움직임 크기를 구함.
        float prevDeltaMag = (t1PrevPos - t2PrevPos).magnitude;
        float deltaMag = (touch_1.position - touch_2.position).magnitude;

        //두 크기값의 차를 구해 줌 인/아웃의 크기값을 구한다.
        float deltaMagDiff = prevDeltaMag - deltaMag;

        Camera.main.orthographicSize += deltaMagDiff;
        Camera.main.orthographicSize = Mathf.Clamp(Camera.main.orthographicSize, 7, 30);
    }
}
  • 줌 기능은 카메라 이동 코드와는 다르게 조금 복잡한데, 결론적으로 이전 프레임과 현제 프레임의 두 터치 사이의 벡터 크기(Maginitude) 값을 이용해서 deltaMagnitude 값을 구한다.
  • 이렇게 구해진 deltaMagnitude 값을 Camera의 orthographicSize에 더해주면 줌 인/아웃 기능 구현이 가능하다.
  • orthographicSize가 너무 작아져서 음수로 내려가면 화면이 뒤집어져 보이므로 Mathf.Clamp로 적절하게 최소, 최대값을 고정해준다.
  • deltaMagnitude 값을 바로 적용하면 줌이 빠르게 적용되니 해당 값에 speed(float) 값을 곱해서 사용해준다.

 

 

 

결과

 

 

 

 

 

 

반응형
반응형

 

 

 

 

풀이 코드

#include <string>
#include <vector>
#include <queue>

using namespace std;

#define FAIL -1

int solution(vector<int> scoville, int K) {
    int answer = 0;
    priority_queue<int, vector<int>, greater<int>> pq;
    for(auto it : scoville)
    {
        pq.push(it);
    }

    while(pq.size() > 1 && pq.top() < K)
    {
        int less_1 = pq.top();
        pq.pop();
        int less_2 = pq.top();
        pq.pop();

        int mixScoville = less_1 + less_2 * 2;
        answer++;

        pq.push(mixScoville);
    }

    if(pq.top() < K)
    {
        answer = FAIL;
    }

    return answer;
}

 

 

 

 

기타

- 코드 작성은 쉬웠는데, 제발 테스트 케이스가 조금 많았으면 좋겠다 ㅠㅠ.. (1개는 너무한거 아닌가)

- C#에서는 우선순위 큐를 직접 구현해서 사용했었는데, C++에서는 그냥 제공되서 작성에 편했다.

- 다른 사람 풀이를 보니 아래와 같이 작성해서 for문 돌려서 값을 넣을 필요 없이 바로 값을 넣을 수 있었다.

priority_queue<int,vector<int>,greater<int>> pq (scoville.begin(),scoville.end());

 

 

 

 

 

반응형

'Stack > Coding test' 카테고리의 다른 글

[C# / Lv2] JadenCase 문자열 만들기  (0) 2022.10.07
[C# / Lv2] 최댓값과 최솟값  (0) 2022.10.07
[C# / Lv2] 주식 가격  (0) 2022.02.26
[C++ / Lv 2] 다리를 지나는 트럭  (0) 2022.02.26
[C++ / Lv2] 프린터  (0) 2022.02.15
반응형

 

 

 

 

이전에 비싸게 주고 구매했던 기보드가 말썽을 일으켜서 새 키보드를 찾아보다가 발견하게된 키보드다.

처음에는 불편하더라도 그냥 애플 매직키보드를 구매할까해서 구글링 했는데 매직 키보드랑 비슷한 MS Designer Compact 키보드라는걸 찾아서 구매하게 되었다.

 

유튜브 영상도 찾아보니 칭찬일색이길래 자세히 찾아보니 생각보다 괜찮았다.

건전지가 들어가는 식이어서 잠깐 고민했는데 배터리 타임이 3년 이상이라고 되어있어서 그냥 구매해버렸다.

 

 

색상은 매트 블랙하고 라이트 그레이 두가지가 있었고 매트 블랙으로 구매했는데, 라이트 그레이로 할껄 그랬다.

매트 블랙이라는 색상 때문에 지문 자국이 키보드에 더 눈에 띈다고 해야하나..

 

 

개인적으로 생각하는 장단점

1. 장점

  • 무선 (무선이 단점이 될 수 있을리가 없다.)
  • 애플 매직 키보드 키감으로 생각하고 타자를 쳐봤는데, 통통 튀는듯한 키감이 좋았다.
  • 윈도우에 맞춰져 있는 기능 키들.
  • 키보드 높이가 낮다. (이 부분은 케바케인듯. 낮아서 불편하다는 사람도 있음.)

2. 단점

  • 한자 키를 다른 키와 병합을 했으면 좀 더 좋았을것 같다. (오른쪽 Alt키라던지..)
  • 스페이스 바가 오른쪽으로 치우쳐져 있어서 왼손 엄지로 스페이스 바를 치는 사람한테는 주의가 필요하다.
  • 힘을 줘서 타이핑 할 때 통 울림(?)이 있다. 통 울림이 거슬리는 사람은 장패드를 사용해야 할듯하다.

3. 기타

  • 매트 블랙은 색상 때문인지 이물질(손 때나 먼지)이 더 부각된다. 이 부분이 싫은 사람은 화이트로 구매할 것.

 

추가로 사은품으로 팜레스트를 제공하고, 이벤트로 포토리뷰를 작성하면 키보드 집까지 사은품으로 제공한다.

여태 기계식 키보드만 고집해왔는데 팬타그래프 키보드도 좋다는걸 깨닫게 해준 키보드다.

 

 

 

 

반응형
반응형

 

 

 

 

풀이 코드

using System;
using System.Collections.Generic;

public class Solution {
    public int[] solution(int[] prices) {
        List<int> list = new List<int>(prices.Length);

        for(int i = 0; i < prices.Length; i++)
        {
            list.Add(GetSeconds(prices, i));
        }

        return list.ToArray();
    }

    private int GetSeconds(int[] prices, int startIndex)
    {
        int returnValue = 0;
        for(int j = startIndex + 1; j < prices.Length; j++, returnValue++)
        {
            if(prices[startIndex] > prices[j])
            {
                returnValue++;
                break;
            }
        }

        return returnValue;
    }
}

 

 

 

 

기타

- 이 문제가 왜 스택/큐와 관련이 있는지 잘 모르겠다. 스택을 사용한사람 풀이를 봐도 이걸 이렇게까지 해서 스택을 사용해야 싶기도 하고..

- 바로 직전에 푼 '다리를 지나는 트럭' 문제하고 난이도 차가 너무 나서 풀면서도 의심스러웠다.

- 결국 가독성 좋고, 간단하게 작성하는 법을 선택했는데, 스택/큐에 정신이 사로잡혀서 list를 사용하는 실수를 저질렀다.

- 그냥 배열로 사용해서 'if(prices[startIndex] > prices[j])' 조건문에서 배열 원소에 증가연산자 사용하면 결과 반환할 때, array 변환도 안해도 되고 가독성도 좀 더 올라갔을것 같다. (효율성 테스트에서도 list 사용 여부에 따라 1ms 차이가 났다.)

 

 

 

 

반응형

'Stack > Coding test' 카테고리의 다른 글

[C# / Lv2] 최댓값과 최솟값  (0) 2022.10.07
[C++ / Lv2] 더 맵게  (0) 2022.03.03
[C++ / Lv 2] 다리를 지나는 트럭  (0) 2022.02.26
[C++ / Lv2] 프린터  (0) 2022.02.15
[C++ / Lv2] 기능개발  (0) 2022.02.15

+ Recent posts