Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

문제 014 : 표 편집 #53

Open
wants to merge 2 commits into
base: solutions
Choose a base branch
from
Open

문제 014 : 표 편집 #53

wants to merge 2 commits into from

Conversation

tiaz0128
Copy link
Contributor

@tiaz0128 tiaz0128 commented Jan 26, 2024

소요시간

  • 제한 시간을 넘겨도 풀지 못함

사용한 자료구조, 알고리즘

  • 우선 스택을 써서 저장하고 복원하는건 이해돼는데
  • 배열을 직접 조작해서라도 풀고 싶은데 안됌.
  • 일단은 풀었다. 출력결과 보면서 천천히 하나하나 구현하니 되긴함.

해당 자료구조, 알고리즘을 사용한 근거

  • 실제로 되돌리기 기능을 스택으로 구현하기 때문에

어려웠던 구현 포인트

  • 주어진 케이스는 통과하는데
  • 실제 문제는 어떤 예외를 처리 하지 못한건지 모르겠다.
  • 실제 리스트를 조작하는 메서드는 쓰지 않아야 한다.

구현한 코드의 시간 복잡도

  • insert , pop 를 이용한 구현

  • for 문 안에서 = $O(N)$ 를 했기 떄문에 = $O(N^2)$

  • 그래서 효율성 테스트는 통과 할 수 없다.

  • $O(N)$ 로 푸는 방법이 필요

추가한 테스트 케이스와 그 이유

  • 테스트 케이스를 제대로 잘 추가하는 팁 같은게 있는지
  • 주어진 케이스는 통과하는데 어디서부터 실패하는 케이스를 어떻게 효율적으로 추가 할 수 있을지

개선이 필요한 부분은?

  • 테스트 케이스를 추가하는 방법에 대해서 조금 더 구체적으로 생각해 볼 필요가 있어보인다
  • 실제 리스트를 조작하는 메서드는 안쓰고 가상으로 리스트를 조작하는 문제는 많이 접해 볼 필요가 있다.

Copy link
Contributor

👋 @tiaz0128 님 안녕하세요!
코딩 테스트 합격자 되기(파이썬 편) : 문제 014 를 풀고 있으시네요!
해당 문제의 책 페이지와 프로그래머스 링크를 알려드릴께요!

06장 스택
표 편집 ⭐⭐⭐⭐⭐
코딩 테스트 합격자 되기(파이썬 편) - p168
프로그래머스 link

  1. 테스트가 실패한 경우 다시 한번 문제를 풀어서 push 해보세요!
  2. 로컬에서 디버깅도 해보고 스스로 코멘트를 달면서 공부해보세요!
  3. 다시 한번 문제를 풀어서 push 해보세요!

@github-actions github-actions bot added the fail 테스트에 실패했습니다. label Jan 26, 2024
Copy link
Contributor

@tiaz0128 님. 아쉽습니다.

테스트에 실패했습니다.
다시 한번 문제를 풀고, push 하고 테스트를 통과해보세요!

너무 어려우시면 같은 문제를 다른 사람들은 어떻게 풀고있는지 참고도 해보세요!
문제 014 - 보러가기

Copy link
Contributor

❌ 아래의 코드는 테스트를 통과하지 못했습니다.

# n = 표의 행 개수
# k = 처음 선택된 행의 위치
# cmd = 수행한 명령어 문자배열


def solution(n, k, cmd):
   # 1. cmd 에서 명령어를 반복하면서 형태를 변경 배열?
   # 2. 선택 위치를 잘 고려
   # 3. 삭제 복구 = 스택사용해서 관리
   #  - 삭제시 C
   #    - 바로 아레 행
   #    - 삭제된 행이 가장 마지막 행인 경우 -> 바로 윗 행
   #  - 복구시 Z
   #   - 현재 선택된 행은 그대로
   return

@github-actions github-actions bot added Pass 테스트에 성공했습니다. Merge 해주세요! and removed fail 테스트에 실패했습니다. labels Jan 27, 2024
Copy link
Contributor

✨ 아래의 코드는 테스트를 통과한 코드입니다.

# n = 표의 행 개수
# k = 처음 선택된 행의 위치
# cmd = 수행한 명령어 문자배열


def solution(n, k, cmd):
    dirs = {"U": -1, "D": 1}
    stack = []

    arr = ["O"] * n

    for command in cmd:
        print(f"k = {k} / command {command}")

        if command == "C":
            stack.append(k)
            arr.pop(k)

            if k == len(arr):
                k -= 1
            pass
        elif command == "Z":
            idx = stack.pop()

            if idx <= k:
                k += 1

            arr.insert(idx, "O")
            pass
        else:
            dir, cnt = command.split(" ")
            k += dirs[dir] * int(cnt)

        print("k=", k)

    for idx in reversed(stack):
        arr.insert(idx, "X")

    return "".join(arr)

@tiaz0128
Copy link
Contributor Author

tiaz0128 commented Jan 27, 2024

위 코드는 리스트를 직접 조작해서 정확성만 통과

효율성 통과를 위해서는 insert , pop(idx) 등은 쓰지 않는 방법이 필요

image

@tiaz0128 tiaz0128 added fail 테스트에 실패했습니다. and removed Pass 테스트에 성공했습니다. Merge 해주세요! labels Jan 27, 2024
@tiaz0128 tiaz0128 changed the title 문제 014 : 문제 014 : 표 편집 Jan 27, 2024
@tiaz0128
Copy link
Contributor Author

tiaz0128 commented Jan 29, 2024

이 문제는 책을 봐도 잘 이해가 안돼서 일단 그냥 넘어가고

날 잡아서 다시 공부해봐야겠다...

UP / DOWN 이 왜 -1, 1 부터 시작하는건지 그런 내용을 모르겠다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
fail 테스트에 실패했습니다. 도움이 필요해요! 문제014
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant