[프로그래머스 - 스택/큐] 같은 숫자는 싫어

    🔍문제

    배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

    • arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1]을 return 합니다.
    • arr = [4, 4, 4, 3, 3] 이면 [4, 3]을 return 합니다.

    배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

    제한 사항

    • 배열 arr의 크기 : 1,000,000 이하의 자연수
    • 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

    입출력 예

    arr answer
    [1,1,3,3,0,1,1] [1,3,0,1]
    [4,4,4,3,3] [4,3]

     


    💡 풀이 1

     

    1. 빈 결과 리스트를 생성
    2. 배열을 순회하면서 이전 숫자와 현재 숫자를 비교
    3. 연속되지 않은 숫자만 결과 리스트에 추가

    하는 방식으로 코드를 생각했다.

     

     💣 문제 발생:  마지막 요소 참조

     

    def solution(arr):
        answer = []	
        
        for i in range(len(arr)):
            if arr[i-1] != arr[i]:
                answer.append(arr[i])
        return answer[]

     for문이 처음 돌 때, arr [i-1]는 arr [-1]이 되어 마지막 요소를 참조하게 되어 의도한 바가 아니게 된다.

     

    def solution(arr):
        answer = []
        
        for i in range(len(arr)):
            if i == 0 or arr[i-1] != arr[i]:
                answer.append(arr[i])
        return answer

    i=0인 경우, 즉 배열의 첫 번째 요소는 무조건 추가하여 문제를 해결하였다. 

     

     

    💡 풀이 2

    if 문을 어떻게 효율적으로 작성할까 고민하다가 두 번째 풀이를 생각하게 되었다.

    def solution(arr):
    	//스택에서 원소를 제거하지 않고 가져오기만 할 때에는 [-1]을 이용
        answer = [-1] 	
        
        for in range(len(arr)):
    	if answer arr[i]와 같지 않으면: 
        	값을 추가함 answer.append(arr[i])
        return answer

    풀이 1의 arr 배열끼리 비교가 아닌,

    answer 배열과 arr 배열을 비교하여 i=0인 조건을 제거하였다. 

     

     💣 문제 발생:  전체 리스트 반환

    def solution(arr):
        answer = [-1]
        for i in range(len(arr)):
            if answer[-1] != arr[i]:
                answer.append(arr[i])
        return answer[]

    맨 마지막 코드에서 전체 리스트를 반환해야 하는데, 잘못된 구문으로 인해 오류가 발생하였다. 

     

    def solution(arr):
        answer = [-1]  # 초기값으로 -1을 넣음
        for i in range(len(arr)):
            if answer[-1] != arr[i]: 
                answer.append(arr[i])
        return answer[1:]  # 처음에 추가한 -1을 제외하고 반환

    answer에 임의의 값 -1을 넣었기 때문에, -1을 제거하고 출력해야 한다.

     

     


     

    코딩테스트 준비 스터디에 새로 참여하게 되었다.

    파이썬은 교양으로 접한 것이 다인데, 그때의 기억을 되살려서 공부하고 있다.

    처음으로 코딩테스트를 준비하니까 너무 신기하고 설렌다.

     

    긴 줄글이라면 질색했는데, 문제에서의 요구조건을 찾는 재미를 알게 돼서 이제 줄글 읽는 게 흥미롭다. 

    앞으로도 꾸준히 코테 준비를 하면서 내 코딩 실력을 향상시켜야지🤩 

    댓글