이번 문제는 두 큐 합 같게 만들기 문제이다.
전달받은 길이가 같은 두 개의 큐에서 하나의 원소를 추출해 다른 배열에 집어넣는 작업을 통해 두 큐의 합을 같게 만드려고 한다. pop 과 insert 로 정의하며, pop 은 언제나 첫번째 원소를 추출하고, insert 는 마지막 자리에 삽입한다.
위 예시처럼 작업을 진행하게 되는데, 이때 필요한 작업의 최소 횟수를 구해야 한다.
또한 어떤 방법으로도 합을 같게 만들 수 없는 경우라면 -1을 반환하면 된다.
첫번째 작성한 코드이다.
일단 원소의 길이가 30만개 이고, 원소는 10^9 이다... 단순 반복문을 활용하는 것만으로는 시간적으로 무리일 것 같다.
역시나 4번 테케 이후로는 모두 시간초과로 뜬다. 아무래도 while문도 문제가 있어 보이고, 특히 combinations()를 이용한 조합 가능한 경우의 수를 찾는게 시간을 많이 잡아 먹는것 같다.
그렇게 작성한 두 번째 코드,
combinations()는 삭제해 버렸고, 조합 불가 판단 기준을 pop() insert() 실행 후에 처음과 같아지는 경우로 변경 하였다.
하지만 이 역시도 일부 케이스에서 시간 초과 이다. 왜인지 deque 로 풀이해도 조건 범위가 너무 넓어서 해당 방법을 아닌것 같다.
그렇게 만들어진 최종 코드.
1. 전체합 보다는 절반의 합이 더 중요하다.
2. 배열을 하나만 가지고 사용한다.
3. 전체 리스트에서 값을 찾아 연산에 사용한다. i, j 는 각 배열의 index 를 뜻한다.
하나의 배열의 합을 가지고 연산을 시작하며, 특별히 배열을 삭제, 삽입이 일어나지 않기 때문에 속도가 굉장히 빠르다. 또한 i 와 j값이 모두 전체 배열의 마지막까지 도달하였고, 현재 합계가 목표 합계과 같지 않을 경우 미리 준비된 answer -1를 반환하여 종료된다.
'프로그래머스 퀴즈(Python) > level 2' 카테고리의 다른 글
23.02.10 파이썬 코딩 퀴즈#148 혼자 놀기의 달인 (프로그래머스 스쿨) (0) | 2023.02.10 |
---|---|
23.02.10 파이썬 코딩 퀴즈#147 할인 행사 (프로그래머스 스쿨) (0) | 2023.02.10 |
23.02.09 파이썬 코딩 퀴즈#145 양궁대회 (프로그래머스 스쿨) (0) | 2023.02.09 |
23.02.09 파이썬 코딩 퀴즈#144 주차 요금 계산(프로그래머스 스쿨) (0) | 2023.02.09 |
23.02.09 파이썬 코딩 퀴즈#143 K진수에서 소수 개수 구하기(프로그래머스 스쿨) (0) | 2023.02.09 |