728x90

Programmers Code/Level 2 23

[Programmers] level2 - n^2 배열 자르기 (Python) : 월간 코드 챌린지 시즌3

▶n^2 배열 자르기 (Python) : 월간 코드 챌린지 시즌3 (level 2) ▶문제 정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3,..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부터 i행 i열까지의 영역 내의 모든 빈칸을 숫자 i로 채웁니다. 1행, 2행,...,n행을 잘라내어 모두 이어 붙인 새로운 1차원 배열을 만듭니다. 새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1],..., arr[right]만 남기고 나머지는 지웁니다. 정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 ret..

[Programmers] level2 - [1차] 캐시 (Python) : 2018 KAKAO BLIND RECRUITMENT

▶[1차] 캐시 - 2018 KAKAO BLIND RECRUITMENT (level 2) ▶문제 지도개발팀에서 근무하는 제이지는 지도에서 도시 이름을 검색하면 해당 도시와 관련된 맛집 게시물들을 데이터베이스에서 읽어 보여주는 서비스를 개발하고 있다. 이 프로그램의 테스팅 업무를 담당하고 있는 어피치는 서비스를 오픈하기 전 각 로직에 대한 성능 측정을 수행하였는데, 제이지가 작성한 부분 중 데이터베이스에서 게시물을 가져오는 부분의 실행시간이 너무 오래 걸린다는 것을 알게 되었다. 어피치는 제이지에게 해당 로직을 개선하라고 닦달하기 시작하였고, 제이지는 DB 캐시를 적용하여 성능 개선을 시도하고 있지만 캐시 크기를 얼마로 해야 효율적인지 몰라 난감한 상황이다. 어피치에게 시달리는 제이지를 도와, DB 캐시를..

[Programmers] level2 - 튜플 (Python) : 2019 카카오 테크 인턴십

▶튜플 - 2019 카카오 테크 인턴십 (level 2) ▶문제 셀 수 있는 수량의 순서 있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수 있습니다. (a1, a2, a3,..., an) 튜플은 다음과 같은 성질을 가지고 있습니다. 중복된 원소가 있을 수 있습니다. ex : (2, 3, 1, 2) 원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서로 다른 튜플입니다. ex : (1, 2, 3) ≠ (1, 3, 2) 튜플의 원소 개수는 유한합니다. 원소의 개수가 n개이고, 중복되는 원소가 없는 튜플 (a1, a2, a3,..., an)이 주어질 때(단, a1, a2,..., an은 ..

[Programmers] level2 - 오픈채팅방 (Python) : 2019 KAKAO BLIND RECRUITMENT

▶오픈채팅방 (Python) : 2019 KAKAO BLIND RECRUITMENT (level 2) ▶문제 https://school.programmers.co.kr/learn/courses/30/lessons/42888 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ▶문제 record는 다음과 같은 문자열이 담긴 배열이며, 길이는 1 이상 100,000 이하이다. 다음은 record에 담긴 문자열에 대한 설명이다. 모든 유저는 [유저 아이디]로 구분한다. [유저 아이디] 사용자가 [닉네임]으로 채팅방에 입장 - "Enter [유저 아이디] [닉네임]"..

[Programmers] level2 - 괄호 변환 (Python) : 2020 KAKAO BLIND RECRUITMENT (설명 X)

▶괄호 변환 (Python) : 2020 KAKAO BLIND RECRUITMENT (level 2) ▶문제 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발 역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴파일하여 로그를 보니 대부분 소스 코드 내 작성된 괄호가 개수는 맞지만 짝이 맞지 않은 형태로 작성되어 오류가 나는 것을 알게 되었습니다. 수정해야 할 소스 파일이 너무 많아서 고민하던 "콘"은 소스 코드에 작성된 모든 괄호를 뽑아서 올바른 순서대로 배치된 괄호 문자열을 알려주는 프로그램을 다음과 같이 개발하려고 합니다. ▶용어의 정의 '('와')' 로만 이루어진 문자열이 있을 경우, '('의 개수와 ')'의 개수..

[Programmers] level2 - 순위 검색 (Python) : 2021 KAKAO BLIND RECRUITMENT

▶순위 검색 (Python) : 2021 KAKAO BLIND RECRUITMENT (level 2) ▶문제 코딩 테스트 참여 개발언어 항목에 cpp, java, python 중 하나를 선택해야 합니다. 지원 직군 항목에 backend와 frontend 중 하나를 선택해야 합니다. 지원 경력 구분 항목에 junior와 senior 중 하나를 선택해야 합니다. 선호하는 소울푸드로 chicken과 pizza 중 하나를 선택해야 합니다. 지원자가 지원서에 입력한 4가지의 정보와 획득한 코딩 테스트 점수를 하나의 문자열로 구성한 값의 배열 info, 개발팀이 궁금해하는 문의 조건이 문자열 형태로 담긴 배열 query가 매개변수로 주어질 때, 각 문의 조건에 해당하는 사람들의 숫자를 순서대로 배열에 담아 retu..

[Programmers] level2 - 주차 요금 계산 (Python) : 2022 KAKAO BLIND RECRUITMENT

▶주차 요금 계산 - 2022 KAKAO BLIND RECRUITMENT (level 2) ▶문제 주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다. 어떤 차량이 입차 된 후에 출차된 내역이 없다면, 23:59에 출차된 것으로 간주합니다. 0000번 차량은 18:59에 입차 된 이후, 출차된 내역이 없습니다. 따라서, 23:59에 출차된 것으로 간주합니다. 00:00부터 23:59까지의 입/출차 내역을 바탕으로 차량별 누적 주차 시간을 계산하여 요금을 일괄로 정산합니다. 누적 주차 시간이 기본 시간 이하라면, 기본요금을 청구합니다. 누적 주차 시간이 기본 시간을 초과하면, 기본요금에 더해서, 초과한 시간에 ..

[Programmers] level2 - 문자열 압축 (Python) : 2020 KAKAO BLIND RECRUITMENT

▶문자열 압축 (Python) : 2020 KAKAO BLIND RECRUITMENT (level 1) ▶문제 ... 간단한 예로 "aabbaccc"의 경우 "2a2ba3c"(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, "abcabcdede"와 같은 문자열은 전혀 압축되지 않습니다. "어피치"는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단위로 잘라서 압축하여 더 짧은 문자열로 표현할 수 있는지 방법을 찾아보려고 합니다. 예를 들어, "ababcdcdababcdcd"의 경우 문자를 1개 단위로 자르면 전혀 압축되지 않지만, 2개 단위로 잘라서 압축한다면 "2ab2cd2ab2..

[Programmers] level2 - 행렬 테두리 회전하기 (Python) : 2021 Dev-Matching(상반기)

▶행렬 테두리 회전하기 (Python) : 2021 Dev-Matching 상반기 (level 2) ▶문제 rows x columns 크기인 행렬이 있습니다. 행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다. 이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다. 각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현하며, 그 의미는 다음과 같습니다. x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전합니다. 다음은 6 x 6 크기 행렬의 예시입니다. 이 행렬에 (2, 2, 5, 4) 회전을 적용하면, 아래 그림과 같이 2행 2열부터..

[Programmers] level2 - 다리를 지나는 트럭 (Python) : 스택/큐

▶다리를 지나는 트럭 - 스택/큐 (level 2) ▶문제 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다. 예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다. solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 ..

[Programmers] level2 - 전화번호 목록 (Python) : 해시

▶전화번호 목록 - 해시 (level 2) ▶문제 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. ▶제한사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해..

[Programmers] level2 - 카펫 (Python) : 완전 탐색

▶카펫 - 완전 탐색 (level 2) ▶문제 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요. ▶제한사항 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다. 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다. 카펫의 가로길이는 ..

[Programmers] level2 - 두 큐 합 같게 만들기 (Python) : 2022 카카오 테크 인턴십

▶두 큐 합 같게 만들기 - 2022 카카오 테크 인턴십 (level 2) ▶문제 https://school.programmers.co.kr/learn/courses/30/lessons/118666?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 두 개의 숫자 리스트 (queue) 안의 숫자들 합이 같도록 만들기 (숫자 리스트 (queue) 2개) 두 리스트 합이 같도록 만드는데 드는 작업 횟수 반환 조건: 작업 1회 = 한쪽 리스트 첫 번째 value를 pop 해서 다른 리스트 마지막 위치에 insert. 두 리스트의 길이는..

[Programmers] level2 - 올바른 괄호 (Python) : 스택/큐

▶올바른 괄호 - 스택/큐 (level 2) ▶문제 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()"는 올바른 괄호입니다. ")()(" 또는 "(()("는 올바르지 않은 괄호입니다. '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요. ▶제한사항 문자열 s의 길이 : 100,000 이하의 자연수 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다. ▶출력 ▶풀이 괄호는 항상 열린 후에 닫혀야 한다. 그렇기 때문에 열린 괄호는 queue에 저..

[Programmers] level2 - 배달 (Python) : Summer/Winter coding(~2018)

▶배달 - Summer/Winter coding(~2018) (level 2) ▶문제 N개의 마을로 이루어진 나라가 있습니다. 이 나라의 각 마을에는 1부터 N까지의 번호가 각각 하나씩 부여되어 있습니다. 각 마을은 양방향으로 통행할 수 있는 도로로 연결되어 있는데, 서로 다른 마을 간에 이동할 때는 이 도로를 지나야 합니다. 도로를 지날 때 걸리는 시간은 도로별로 다릅니다. 현재 1번 마을에 있는 음식점에서 각 마을로 음식 배달을 하려고 합니다. 각 마을로부터 음식 주문을 받으려고 하는데, N개의 마을 중에서 K 시간 이하로 배달이 가능한 마을에서만 주문을 받으려고 합니다. 다음은 N = 5, K = 3인 경우의 예시입니다. 위 그림에서 1번 마을에 있는 음식점은 [1, 2, 4, 5] 번 마을까지는 ..

[Programmers] level2 - 행렬의 곱셈 (Python) : 연습문제

▶행렬의 곱셈 - 연습문제 (level 2) ▶문제 2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요. ▶제한사항 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다. 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다. 곱할 수 있는 배열만 주어집니다. ▶출력 ▶풀이 행렬 곱셈을 어떻게 하는지 알기만 하면 풀 수 있는 문제다. def solution(arr1, arr2): answer = [[0 for _ in range(len(arr2[0]))] for _ in range(len(arr1))] for i in range(len(arr1)): for j in range(len(arr2[0]..

[Programmers] level2 - 게임 맵 최단거리 (Python) : 깊이/너비 우선 탐색(DFS/BFS)

▶게임 맵 최단거리 - 깊이/너비 우선 탐색(DFS/BFS) (level 2) ▶문제 ▶제한사항 ▶출력 https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번에도 그림이 많은 문제여서 링크로 대체하겠습니다. ▶풀이 간단하게 dfs, bfs를 이용해서 풀면 되는 문제다. deque를 이용해서 popleft를 하는 것은 bfs에 해당하는 풀이이다. 나는 bfs를 이용해서 문제를 풀었고, 방문한 적이 있는 곳을 기록하기 위해서 visited를 이용했다...

[Programmers] level2 - 영어 끝말잇기 (Python) : Summer/Winter coding(~2018)

▶영어 끝말잇기 - Summer/Winter coding(~2018) (level 2) ▶문제 ▶제한사항 문제 및 제한 사항은 너무 긴 거 같아서 링크로 대체하겠습니다. https://school.programmers.co.kr/learn/courses/30/lessons/12981 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ▶출력 입출력 예 #1 3명의 사람이 끝말잇기에 참여하고 있습니다. 1번 사람 : tank, wheel, mother 2번 사람 : kick, land, robot 3번 사람 : know, dream, tank 와 같은 순서로 말..

[Programmers] level2 - 2 x n 타일링 (Python) : 연습문제

▶2 x n 타일링 - 연습문제 (level 2) ▶문제 가로 길이가 2이고 세로의 길이가 1인 직사각형 모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다. 타일을 가로로 배치하는 경우 타일을 세로로 배치하는 경우 예를 들어서 n이 7인 직사각형은 다음과 같이 채울 수 있습니다. 직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 solution 함수를 완성해주세요. ▶제한사항 가로의 길이 n은 60,000 이하의 자연수입니다. 경우의 수가 많아질 수 있으므로, 경우의 수를 1,000,000,007으로 나눈 나머지를 retur..

[Programmers] level2 - 수식 최대화 (Python) : 2020 카카오 인턴십

▶수식 최대화 - 2020 카카오 인턴십 (level 2) ▶문제 https://school.programmers.co.kr/learn/courses/30/lessons/67257 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 보통은 문제를 적는데, 너무 길어서 링크로 대체하도록 하겠습니다. ▶제한사항 expression은 길이가 3 이상 100 이하인 문자열입니다. expression은 공백 문자, 괄호 문자 없이 오로지 숫자와 3가지의 연산자(+, -, *) 만으로 이루어진 올바른 중위 표기법(연산의 두 대상 사이에 연산기호를 사용하는 방식)으로 표현..

728x90