ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • A사 코딜리티 문제
    Algorithm/problems 2018. 7. 19. 14:44

    A사 코딜리티 문제 - 난이도(하), 결과(100%)

    문제1

    입력 N의 각 자리 숫자들을 재정렬해서 만들 수 있는 가장 큰 수를 반환

    풀이

    각 자릿수를 list로 쪼갠다음 내림차순 정렬 후 다시 이어주면 된다.

    python으로 더 간단하게(return int(''.join(sorted(str(N), reverse=True)))도 가능) 가능하다 일단 제출은 변환하는 부분도 같이 작성.

    문제2

    N개의 나무의 높이 A가 주어지면, 이 중 하나만 제거해서 오름차순으로 정렬할 수 있는 경우의 수 반환. 불가능하면 0반환

    풀이

    처음에는 각 자리를 제거해서 오름차순이 되는지 계산하는 단순한 방법을 사용했으나, 더 나은 방법을 찾아서 제출했다. 하나만 제거해서 오름차순이 된다는건 높이가 감소하는 부분이 전체에 1개 이하로 존재해야 한다. 높이 감소가 2개 이상이라면 불가능한 경우이다. 만약 높이 감소가 없다면 이미 정렬되어 있고 어떤 항목을 제거해도 정렬은 유지 된다.

    중요한 부분은 높이 감소가 하나만 존재하는 경우로, 해당 항목이 i번째라면 [0, 1, .., i-1]과 [i, i+1, .., N-1]은 각각 정렬이 되어 있는 상태이다. 따라서 두 part를 이어서 정렬이 되는 경우는 i번째를 제거하는 경우와 i-1번째를 제거하는 경우가 될 수 있는데 이때 제거하는 항목을 기준으로 좌측값과 우측값만 오름차순이면 전체가 다 정렬되게 된다.

    문제3

    명령어 문자열 S가 주어지면, 수행 후 stack의 최상위 값을 반환, 에러일 경우 -1반환

    명령어

    - 숫자면 push

    - DUP면 top을 한번더 push

    - POP면 top제거

    - +면 상위 2개 값을 더해서 push

    - -면 최상위에서 다음값 빼서 push

      에러

    - 0 <= x <= 2^20-1 이외일 경우 에러

    - 명령을 수행할 대상이 없으면 에러

    풀이

    stack을 구현하고 input에 따라 처리해 주면 된다. 에러인 경우는 일괄적으로 처리를 위해 stack에서 예외를 던지고 처리하도록 했다.


    결과

    코딜리티 결과


Designed by Tistory.