본문 바로가기

전체 글

(408)
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이다. 이제 오..
23.05.08 파이썬 코딩 퀴즈#238 등대 (프로그래머스 스쿨) 이번 문제는 등대 문제이다. 각 등대들 사이에는 뱃길이 존재하며, 하나의 등대에 불이 켜지게 된다면 그 등대와 바로 이어진 뱃길들은 안전하게 운항할 수 있다. 이때, 최소한의 등대를 켜서 모든 뱃길을 안전하게 이동 가능하게 하는 등대의 갯수를 return 해야 한다. 특별한 제한 사항은 없다. 입출력 1번은 위 본문의 그림과 같고, 위 그림은 입출력 예 2번을 도식화한 모습이다. 최소 3개의 등대에 불을 밝혀야지 모든 뱃길을 안전하게 운항 가능하다. 이번 문제의 핵심은 노드 연결을 기준으로, 상위 노드에 불이 켜지면 하위 노드는 반드시 불이 켜지지만, 하위 노드에 불이 꺼져도 상위 노드에는 영향을 주지 않는다는 점을 생각해야 한다. 재귀 함수의 깊이 제한을 없애주기 위해 sys.setrecursionli..
23.05.03 파이썬 코딩 퀴즈#237 부대복귀 (프로그래머스 스쿨) 이번 문제는 부대복귀 문제이다. level3 에 맞춰서 몇가지 변수들이 주어진다. n, roads 는 이미 친숙한 요소이지만, sources 와 destination 이 추가로 전달된다. 이제 해당 sources의 한 요소에서 출발해서 destination으로 가는 최단 거리를 answer에 담아 반환하면 된다. 만약 길이 존재하지 않는다면 -1을 담아서 반환해야 한다. 해당 문제는 sources에서 출발하여 접근하면 시간초과에 걸리는 문제이다. 역으로 destination 에서 출발하여 각 지점에 이르는 최소 거리를 계산한 뒤, answer에는 계산한 최소 거리를 담아서 return 하는게 효율적이다. level3 문제이지만, 생각을 한번 뒤집음으로써 level2 수준의 문제가 된다.
23.04.27 파이썬 코딩 퀴즈#236 고고학 최고의 발견 (프로그래머스 스쿨) 이번 문제는 고고학 최고의 발견 문제이다. 문제 설명을 잘 읽어야 한다. 먼저 퍼즐을 풀기 위해서는 모든 시곗바늘을 12시 방향으로 맞추어야 한다. 각 시곗바늘은 한 번의 조작으로 90도 씩 돌릴 수 있으며, 이때 상하좌우로 연결된 시곗바늘도 함께 돌아가게 된다. 만약 모서리나 꼭지점을 돌리게 된다면 인접한 시계바늘들만 돌릴 수 있다. 그리고 시곗바늘은 시계방향으로만 돌릴 수 있다. 제한사항에서 확인할 사항은 원소들의 값이 어떤 방향을 의미하는 지 이다. 0 == 12시, 1 == 3시, 2== 6시, 3 == 9시 방향이다. 즉 값들을 +1 시켜서 인접한 값들을 모두 0으로 만들어야 하는 문제이다. 입출력 예제 1번을 살펴보면 총 3번을 조작하면 모두 0으로 만들 수 있다. 먼저 문제의 접근 방법부터 ..