본문 바로가기

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

(18)
23.04.17 파이썬 코딩 퀴즈#224 달리기 경주 (프로그래머스 스쿨) 이번 문제는 달리기 경주 문제이다. 문제가 조금 독특하다. 먼저 1등부터 현재 등수 순서대로 담긴 배열 players가 주어진다. 그리고 해설진이 해당 선수의 이름을 한 번 부르면, 그 선수는 바로 앞 선수를 추월하여 순위가 바뀌게 된다. 입출력 예 1번을 보면, "mumu", "soe", "poe", "kai", "mine" 선수가 나란히 달리고 있고, callings 에 "kai"의 이름이 두 번 먼저 등장하다. 따라서 순위는 'mumu', 'kai','soe','poe','mine' 로 kai 가 2등으로 올라선다. 그 다음 mine 의 이름이 두 번 등장하며 따라서 최종적으로 "mumu", "kai", "mine", "soe", "poe" 순위로 경기가 끝나게 된다. 코드에는 2개의 dict 가 ..
23.04.17 파이썬 코딩 퀴즈#223 추억 점수 (프로그래머스 스쿨) 이번 문제는 추억 점수 문제이다. 추억 점수란 사진속 등장하는 인물들의 그리움 점수가 각각 주어졌을 때, 해당 사진의 추억 점수는 등장 인물의 그리움 점수의 합이 된다. 딱히 주의해야 할 사항은 없고, 친절히 photo에 중복된 원소들은 존재하지 않는다. 특별한 설명은 필요 없을듯 하다. 해당 문제를 해결하기 위해 score라는 dict를 새로 작성하였다. name 이 key로 들어가며, 각 그리움 점수가 value 로 들어가게 된다. 그리고 이제 반복문을 통해 각 사진의 인물들을 확인하여 score에 점수가 있는 사람들만 그리움 점수를 더해주면 된다.
23.04.17 파이썬 코딩 퀴즈#222 공원 산책 (프로그래머스 스쿨) 이번 문제는 공원 산책 문제이다. 로봇 강아지는 미리 입력된 명령에 따라 진행되며, 이동 중 공원을 벗어나거나 장애물을 만날경우 해당 명령은 무시하고 다음 명령을 수행하게 된다. 주어진 park 에는 S는 시작점 O는 이동 가능한 통로, X 는 장애물로 표시되어 있으며, 이동 가능한 방향은 NSWE 중 하나로 이루어져 있다. 장애물이 존재하는 입출력 예 2번을 살펴보자. 위 그림처럼 "S 2" 명령어는 수행 불가하기 때문에 무시하고, 바로 그 다음 명령어를 진행하게 된다. 입출력 예 3번을 살펴보자. 이번 문제의 최대 함정이다. 첫번째 명령에서 오른쪽으로 두 칸 이동해야 한다. 하지만 최종적으로 좌표를 벗어나기 때문에 해당 명령은 무시하게 된다. 두번째 명령어 역시 아래로 3칸 움직여야 하지만, 중간에 ..
23.04.17 파이썬 코딩 퀴즈#221 바탕화면 정리 (프로그래머스 스쿨) 이번 문제는 바탕화면 정리 문제이다. 글 설명보다는 그림 설명이 좀 더 문제풀이에 도움이 될 듯 하다. 전달받은 배열 wallpaper를 그림으로 표현하면 위와 같아 진다. 이 때, 드래그를 통해 전체 파일을 선택해야 하며, 이 때 드래그 한 거리는 최소한으로 해야 한다. 즉, 현재 파일(#)이 있는 좌표의 위치를 확인하여, 모든 파일이 선택되는 최소한의 드래그 좌표값을 찾는게 이번 문제의 핵심이다. 제한 사항에서는 좌표값을 잘 확인해야 한다. 입출력 예 1 번을 다시 살펴보자 현재 파일이 위치한 좌표는 (0,1), (1,2),(2,3) (index 기준) 이다. 그리고 전체 파일이 선택되는 최소한의 드래그 좌표는 (0,1),(3,4) 가 된다. 즉 파일 좌표의 최대값과 최소값을 찾아 각 지점 lux, ..
23.04.17 파이썬 코딩 퀴즈#220 덧칠하기 (프로그래머스 스쿨) 이번 문제는 덧칠하기 문제이다. 정해진 m 미터의 구역에 롤러로 페인트를 덧칠해야 한다. 각 구역에는 이미 칠해진 페인트가 있기 때문에 빈 구역을 최소한의 횟수로 덧칠하는게 문제의 핵심이다. 딱히 주의해야 할 사항은 없어 보인다. 먼저 section[0] 이 첫 페인트의 시작 지점이 된다. 제한 사항에 의해 원소는 오른차순으로 정렬되어 있기에, 따로 정렬할 필요가 없다. 이제 반복문을 통해 section 을 탐색하게 되는데, 만약 요소값이 현재 페인트의 위치 이상인 경우라면 페인트 칠을 해 줄 필요가 있다. 입출력 예 1번을 위 코드로 풀어보면 첫번째 painted 위치는 2 가 된다. 즉 2번부터 페인트 칠을 하게된다. 그리고 m 은 4이기 때문에 두번째 painted 의 위치는 6이 된다. 즉 6번부..
23.04.14 파이썬 코딩 퀴즈#219 대충 만든 자판 (프로그래머스 스쿨) 이번 문제는 대충 만든 자판 문제이다. 이 대충 만든 휴대폰 자판의 키의 개수가 1개 부터 최대 100개까지 존재하며, 특정 키를 눌렀을 때 입력되는 문자들도 무작위로 배치되어 있다. 또 한 같은 문자가 자판 전체에 여러 번 할당된 경우도 있으며, 키 하나에 같은 문자가 여러 존재할 수도 있다. 심지어 아예 할당되지 않은 문자열도 있다. 만약 목표 문자열을 작성할 수 없을 때는 -1을 저장한다. 특별한 제한 사항은 없다. keymap 의 길디ㅗ 100 정도이고 원소의 길이도 길어야 100 이며, target 도 동일하게 100, 100 이다. 입출력 예에서 알 수 있는점은 keymap으로 해당 targets을 만들 수 없을 때에는 -1을 배열에 넣어 반환해야 한다는 점이다. 만약 keymap의 요소가 2..
23.02.21 파이썬 코딩 퀴즈#167 카드 뭉치(프로그래머스 스쿨) 이번 문제는 카드 뭉치 문제이다. 설명이 굉장히 복잡해 보이지만, 요약하면 카드 두 뭉치에서 순서대로 카드를 꺼내서 goal 을 만들 수 있는지를 판단하여 'Yes' 또는'No'를 반환해야 한다. 입출력 예 1,2 를 통해서 알 수 있듯이 card1 배열의 순서만 바뀌어도 goal을 만들 수 없다. 코드는 설명에 비해 굉장히 단순하다. 먼저 index로 사용할 i 를 선언하여주고, (사실 for 반복문을 사용해도 코드는 같다), while문을 돌면서 goal를 탐색한다 그리고 이때 일치하는 각 카드의 첫번째 값을 pop()을 이용해 제거해 주면서 탐색을 한다. 만약 일치하는 값이 없으면 바로 'No'를 반환하고 함수는 종료되며, 모두 실행된 이후에는 자동으로 'Yes'를 반환한다.
23.02.21 파이썬 코딩 퀴즈#166 둘만의 암호(프로그래머스 스쿨) 이번 문제는 둘만의 암호 문제이다. 규칙에 따라 만들어야 하는 문자열 s을 순서대로 규칙에 따라 변환한 뒤 그 결과를 반환해야 한다. 다행이도 index 는 1이상 20 이하이다. 레벨 1 문제라 그런지, 크게 어렵지 않은 조건이다. 여러가지 방법이 있겠지만, 내가 생각한 방법은 먼저 ord('a) 부터 ord('z') 까지를 범위로 i 값을 추출하고, 추출한 i 값을 chr() 함수를 이용하여 알파벳 문자열로 변환해 준다, 이 때 chr(i) 는 skip 에 없는 문자열을 대상으로 한다. 그리고 이제 s 를 돌면서 각 알파벳의 index를 구하고, 이를 alphabet의 길이로 나눈 나머지를 구한다. 나머지를 사용하는 이유는 +index 한 값이 범위를 넘어가게 되면 다시 처음으로 순환하기 때문이다.