본문 바로가기

프로그래머스 퀴즈(Python)/level 3

(65)
23.07.14 파이썬 코딩 퀴즈#266 2차원 동전 뒤집기 (프로그래머스 스쿨) 이번 문제는 동전 뒤집기 문제이다. 전달받은 2차원 배열 beginning을 목표 배열인 target으로 만드는 최소한의 방법을 찾는 문제이며, 만약 목표 상태를 만들지 못할 경우에는 -1을 return 해야 한다. 특별한 제한 사항은 없다. 먼저 문제에 접근하는 방법을 생각해 보아야 한다. target 에 맞추기 위해 그 기준을 어디에다가 둘 것인가? 앞서 풀었던 고고학 최고의 발견 문제와 비슷하다는 느낌이 든다. 입출력 예제 1번을 거꾸로 실행해 보았다. 역시 어느것을 먼저 실행 하여도 똑같이 5번에 똑같이 target으로 만드는게 가능하다. 즉 기준이 되는 행,열을 찾아 그 행,열을 기준으로 뒤집기를 시행하면 된다는 의미이다. 해당 문제를 풀기 위해서는 먼저 값이 다른 열을 기준으로 행과 열 중 무..
23.05.23 파이썬 코딩 퀴즈#245 아방가르드 타일링(프로그래머스 스쿨) 이번 문제는 아방가르드 타일링 문제이다. 가로 길이 n, 세로길이 3인 판을 타일링 하는 의뢰를 받은 정우는 위 그림과 같이 두가지 종류의 타일을 이용하여 타일링을 하기로 결정 하였다. 각 타일은 90도로 회전 가능하며, 타일의 개수는 제한이 없다. 이때 n x3 을 타일링하는 방법의 수를 return 하는 함수를 완성해야 한다. 제한 사항에 한가지 중요한 점은 결과 값을 1,000,000,007로 나눈 나머지를 return 해야 한다. 먼저 입출력 예 1번을 보면, 그림과 같이 3가지 방법으로 타일링이 가능하다. 입출력 2는 n이 3인 경우인데, 위 처럼 10가지 방법으로 타일링이 가능하다. 입출력 1과 2번을 연결해서 생각해보자. 먼저 1,2번 타일링에 대해 양옆으로 붙이는 4가지 경우가 추가된다. ..
23.05.20 파이썬 코딩 퀴즈#244 연속 펄스 부분 수열의 합(프로그래머스 스쿨) 이번 문제는 연속 펄스 부분 수열의 합 문제이다. 먼저 펄스 수열이 무엇인지 부터 살펴보자. 문제에서 정의된 펄스 수열이란 [1, -1, 1, -1 ...] 또는 [-1, 1, -1, 1..] 과 같이 1 또는 -1로 시작하면서 1과 -1이 번갈아 나오는 수열을 말한다. 연속 펄스 부분 수열이란 어떤 수열의 연속 부분 수열에 같은 길이의 펄스 수열을 각 원소끼리 곱하여 만든 수열이다. 입출력 예 를 통해 정확한 개념을 집고 넘어가자 먼저 전달받은 수열에서 연속 부분 수열을 만들 수 있는 경우는 굉장히 많다. 이 중 합을 가장 크게 만들어야 하기 때문에, 단순하게 생각하면 가장 작은 수는 -1 을 곱해주고, 가장 큰 수는 +1 을 곱해주는것이 가장 현명한 방법으로 보인다. 한가지 유의해야 할 점은 펄스 수..
23.05.19 파이썬 코딩 퀴즈#243 인사고과 (프로그래머스 스쿨) 이번 문제는 인사고과 문제이다. 각 사원들에게 보너스를 지급하는 조건은 단순하다. 다른 특정 사원들보다 2개의 점수가 낮은 경우라면 그 사람은 대상에서 제외된다. 완호의 점수는 언제나 scores[0] 으로 주어지며, 만약 완호가 인센티브를 받지 못하는 경우라면 -1 을 반환하면 된다. 이번 문제가 레벨3인 이유는 단 하나이다. 완호 뿐만 아니라 모든 사원들을 대상으로 인사고과 점수를 비교하여, 보너스 지급 대상자를 먼저 선정하고, 그 안에서 완소의 석차를 확인해야 하기 때문이다. 예를 들어 [5,5] , [12,2], [11,1] 의 세 사원이 있다. 세번째 사원의 경우 총점은 12점으로 2번째로 높지만 2번째 사원의 점수보다 두 점수가 모두 낮다. 따라서 보너스 지금 대상자는 완호(scores[0])..
23.05.13 파이썬 코딩 퀴즈#242 표 병합 (프로그래머스 스쿨) 이번 문제는 표 병합 문제이다. 설명이 굉장히 길고 자세하기 때문에 잘 읽어볼 필요가 있지만, 엑셀을 어느정도 아는 사람이라면 명령어만 보고도 내용을 이해할 수 있다. 먼저 'UPDATE' 명령어 이다. 좌표가 주어지는 경우 해당 좌표의 값을 value 로 바꾸어 주어야 한다. value 만 두 개 주어지는 경우라면, value1의 값을 가진 모든 셀의 값을 value2로 바꾸어 주어야 한다. 다음 명령어는 'MERGE' 이다. 두 전달받은 (r1,c1) 와 (r2,c2) 을 합치는 역할이다. 이 때 인접하지 않은 경우라면 그 사이에 존재하는 셀들은 영향을 받지 않는다! 범위 선택이 아닌, 단순 두 셀의 내용을 합치는데 의미가 있다. 만약 (r1,c1)의 셀 값이 없다면, 합쳐진 값은 (r2,c2)의 값..
23.05.11 파이썬 코딩 퀴즈#241 미로 탈출 명령어 (프로그래머스 스쿨) 이번 문제는 미로탈출 명령어 문제이다. 기존의 미로 문제에서 조금 변형된, 조금은 더 어려운 문제이다. 먼저 미로를 탈출하기 위한 조건이 기존 문제와는 틀리다. 1. 격자(nxm) 밖으로는 이동할 수 없다. 2. 시작위치 (x,y)에서 (r,c)까지 이동하는 거리는 총 k 여야 하며, 모든 격자를 두 번 이상 방문 가능하다. 3. 미로에서 탈출한 경로를 문자열로 나타냈을 때, 문자열이 사전 순으로 가장 빠른 경로로 탈출 해야 한다. 문자열 'lul'은 왼쪽(left) 한칸, 위(up) 한칸, 왼쪽(left) 한칸을 움직였음을 의미한다. 위 경우를 코드로 확인해보면, 정확히 34가지의 탈출 명령어가 나오게 되며, 이 중 사전 순으로 가장 빠른것은 'dllrl' 이 된다. 총 7개의 변수가 주어지지만, 정리..
23.05.10 파이썬 코딩 퀴즈#240 억억단을 외우자 (프로그래머스 스쿨) 이번 문제는 억억단을 외우자 문제이다. 억억단이라.... 구구단이 1부터 9까지의 수를 1부터 9까지 곱한 결과라면, 억억단은 말 그대로 1부터 1억까지의 수를 1부터 1억까지 곱한 결과이다. 그리고 임의의 수 e 를 먼저 정하여 알려주고, e 이하의 수 s를 여러개 정하여 알려주게 된다. 이 때 s에 대해서 s보다 크거나 같고 e 보다 작거나 같은 수 중에서 억억단에서 가장 많이 등장한 수를 답해야 한다. 만약 그 수가 여러개라면 그 중 가장 작은 수를 답해야 한다. 일단 입출력 예를 보자 e로는 8 이 주어졌고 starts, 즉 s 로는 [1,3,7] 3개의 숫자가 주어졌다. 1의 경우 1x1 단 한 번 등장한다. 2의 경우 1x2, 2x1 총 두 번 등장한다. 3의 경우 1x3, 3x1 총 두 번 ..
23.05.08 파이썬 코딩 퀴즈#239 숫자 타자 대회 (프로그래머스 스쿨) 이번 문제는 숫자 타자 대회 문제이다. 대회 참가자 민희는 왼손 엄지는 4, 오른손 엄지는 6의 위치에서 시작하며, 주어진 문자열 numbers를 최소한의 시간으로 타이핑하는 경우의 가중치를 구해야 한다. 가중치는 아래와 같다. 1. 이동하지 않고 제자리에서 누르는 것은 가중치 1로 계산한다. 2. 상하좌우 인접한 숫자로 이동하여 누르는 것은 가중치 2로 계산한다. 3. 대각선 인접한 숫자로 이동하여 누르는 것은 가중치 3로 계산한다. 4. 손가락은 누른 숫자의 위에서 멈춘다. 입출력 예 1번을 살펴보자. 먼저 왼손 엄지가 4 -> 1로 이동하여 누르면 가중치는 2 이다. 그 다음 7번의 경우 1 - > 4 - > 7 로 이동하게 되는데, 이동에도 가중치는 2가 소모되며, 이때 가중치는 4이다. 이제 오..