반응형

🗓️ 문제 설명

  • 코니는 매일 다른 옷을 조합하여 입는 것을 좋아합니다.
  • 코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다.
  • 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.
  • 코니는 하루에 최소 한 개의 의상은 입습니다.
  • 코니가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 반환해주세요.
  • 제한 사항
    • clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어짐
    • 코니가 가진 의상의 수는 1개 이상 30개 이하
    • 같은 이름을 가진 의상은 존재하지 않음
    • clothes의 모든 원소는 문자열로 이루어짐
    • 모든 문자열의 길이는 1 이상 20 이하인 자연수이고, 알파벳 소문자 또는 '_'로만 이루어짐
  • 입출력 예시
clothes return
[['yellow_hat', 'headgear'], ['blue_sunglasses', 'eyewear'], ['green_turban', 'headgear']] 5
[['crow_mask', 'face'], ['blue_sunglasses', 'face'], ['smoky_makeup', 'face']] 3

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 4번줄 : Counter 함수를 통해 의상의 종류 내에 의상이 몇개가 있는지 계산하여 cnt에 저장
  2. 5번줄 : reduce를 통해 cnt의 value를 모두 곱해준 후 -1을 함
    1. lambda x, y : x*(y+1) = reduce에 적용할 함수로 기존 값에 (새로운 값 + 1)을 곱해주는 함수 
    2. reduce(lambda x, y : x*(y+1), cnt.values(), 1) = 1부터 시작해서 cnt의 values를 불러오면서 lambda 함수를 적용
      • 예시)
        cnt = {'a' : 2, 'b' : 3} 인 경우, 위 reduce를 사용하면
        첫 번째 연산 : 1 * (2 + 1) = 3
        두 번째 연산 : 3 * (3 + 1) = 12

 

반응형
반응형

🗓️ 문제 설명

  • 정수로 이루어진 배열 numbers가 있습니다.
  • 배열의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.
  • 정부 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 반환해주세요.
  • 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
  • 제한 사항
    • 4 ≤ numbers의 길이 ≤ 1,000,000
      • 1 ≤ numbers[i] ≤ 1,000,000
  • 입출력 예시
numbers result
[2, 3, 3, 5] [3, 5, 5, -1]
[9, 1, 5, 3, 6, 2] [-1, 5, 6, 6, -1, -1]

 

💻 코드

최종 코드

 

코드 풀이

 

⚙️ 시행착오

1차 시도

더보기
  • 테스트 결과 : 시간초과 

 

반응형
반응형

🗓️ 문제 설명

  • 땅따먹기 게임을 하려고 하는데, 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다.
  • 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 합니다.
  • 단, 땅따먹기 게임에는 한 행씩 내려올 때, 같은 열을 연속해서 밟을 수 없는 특수 규칙이 있습니다.
  • 마지막 행까지 모두 내려왔을 때, 얻을 수 있는 점수의 최대값을 반환해주세요.
  • 제한 사항
    • 행의 개수 N : 100,000 이하의 자연수
    • 열의 개수는 4개이고, 땅(land)은 2차원 배열로 주어짐
    • 점수 : 100 이하의 자연수
  • 입출력 예시
land answer
[[1, 2, 3, 5], [5, 6, 7, 8], [4, 3, 2, 1]] 16

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 3번줄 : 두번째 행부터 마지막 행까지 i번째 행을 꺼내는 반복문 실행
  2. 4번줄 : 각 행에서 j번째 열을 하나씩 꺼내는 반복문 실행
  3. 5번줄 : land의 i번째 행, j번째 열의 값에 i-1번째 행의 j번째 열을 제외한 값 중 가장 큰 값을 더함
  4. 7번줄 : land의 마지막 행에서 가장 큰 값을 반환

 

반응형
반응형

🗓️ 문제 설명

  • 주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다.
  • 아래는 하나의 예시를 나타냅니다.
  • 요금표 
기본 시간(분) 기본 요금(원) 단위 시간(분) 단위 요금(원)
180 5000 10 600
  • 입/출차 기록
시간(시:분) 차량 번호 내역
05:34 5961 입차
06:00 0000 입차
06:34 0000 출차
07:59 5961 출차
07:59 0148 입차
18:59 0000 입차
19:09 0148 출차
22:59 5961 입차
23:00 5961 출차
  • 자동차별 주차 요금
차량 번호 누적 주차 시간(분) 주차 요금(원)
0000 34 + 300 = 334 5000 + [ (334 - 180) / 10 ] * 600 = 14600
0148 670 5000 + [ (670 - 180) / 10 ] * 600 = 34400
5961 145 + 1 = 146 5000
  • 어떤 차량이 입차된 후에 출차된 내역이 없다면, 23:59에 출차된 것으로 간주합니다.
  • 00:00부터 23:59까지의 입/출차 내역을 바탕으로 차량별 누적 주차 시간을 계산하여 요금을 일괄로 정산합니다.
  • 누적 주차 시간이 "기본 시간" 이하라면, "기본 요금"을 청구합니다.
  • 누적 주차 시간이 "기본 시간"을 초과하면, "기본 요금"에 더해서, 초과한 시간에 대해서 "단위 시간"마다 "단위 요금"을 청구합니다.
  • 주차 요금을 나타내는 정수 배열 fees, 자동차의 입/출차 내역을 나타내는 문자열 배열 records가 매개변수에 주어질 때, 차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아 반환해주세요.
  • 제한 사항
    • fees의 길이 = 4
      • fees[0] = 기본 시간(분)
      • 1 ≤ fees[0] ≤ 1,439
      • fees[1] = 기본 요금(원)
      • 0 ≤ fees[1] ≤ 100,000
      • fees[2] = 단위 시간(분)
      • 1 ≤ fees[2] ≤ 1,439
      • fees[3] = 단위 요금(원)
      • 1 ≤ fees[3] ≤ 10,000
    • 1 ≤ records의 길이 ≤ 1,000
      • records의 각 원소는 "시각 차량번호 내역" 형식의 문자열
      • 시각, 차량번호, 내역은 하나의 공백으로 구분
      • 시각은 차량이 입차되거나 출차된 시각을 나타내며, HH:MM 형식의 길이 5인 문자열
        • HH:MM은 00:00부터 23:59 사이
        • 잘못된 시각은 주어지지 않음
      • 차량번호는 자동차를 구분하기 위한 '0' ~ '9'로 구성된 길이 4인 문자열
      • 내역은 IN(입차) 또는 OUT(출차)로 구성
      • records의 원소들은 시각을 기준으로 오름차순 정렬
      • records는 하루 동안의 입/출차된 기록만 담고 있으며, 입차된 차량이 다음날 출차되는 경우는 주어지지 않음
      • 같은 시각에 같은 차량번호의 내역이 2번 이상 나타내지 않음
      • 마지막 시각(23:59)에 입차되는 경우는 주어지지 않음
      • 주차장에 없는 차량이 출차되는 경우, 주차장에 이미 있는 차량이 다시 입차되는 경우는 주어지지 않음
  • 입출력 예시
fees records result
[180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000]
[120, 0, 60, 591] ["16:00 3961 IN","16:00 0202 IN","18:00 3961 OUT","18:00 0202 OUT","23:58 3961 IN"] [0, 591]
[1, 461, 1, 10] ["00:00 1234 IN"] [14841]

 

💻 코드

최종 코드

  • 변경 사항
    • 주차시간을 계산하기 위해 생성한 딕셔너리 parking_time를 없애고, 딕셔너리 parking의 value를 리스트로 설정
    • 추가 주차 시간을 계산하기 위해 사용한 divmod 대신 math.ceil 함수로 변경

 

코드 풀이

 

 

⚙️ 시행착오

1차 시도

더보기
  • 테스트 결과 : 6개 통과 / 16개 테스트 (37.5%)

 

반응형
반응형

🗓️ 문제 설명

  • 2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환해주세요.
  • 제한 사항
    • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하
    • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수
    • 곱할 수 있는 배열만 주어짐
  • 입출력 예시
arr1 arr2 return
[[1, 4], [3, 2], [4, 1]] [[3, 3], [3, 3]] [[15, 15], [15, 15], [15, 15]]
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

 

💻 코드

최종 코드

 

코드 풀이

 

반응형
반응형

🗓️ 문제 설명

  • 124 나라가 있는데, 이 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
    • 124 나라에는 자연수만 존재합니다.
    • 124 나라에는 모든 수를 표현할 때, 1, 2, 4만 사용합니다.
10진법 124 나라 10진법  124 나라
1 1 6 14
2 2 7 21
3 4 8 22
4 11 9 24
5 12 10 41
  • 자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 반환하세요.
  • 제한 사항
    • n은 50,000,000 이하의 자연수
  • 입출력 예시
n result
1 1
2 2
3 4
4 11

 

💻 코드

최종 코드

코드 풀이

 

반응형
반응형

🗓️ 문제 설명

  • XX게임에는 피로도 시스템(0 이상의 정수로 표현)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다.
  • 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다.
  • "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다.
  • 이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러개 있는데, 한 유저가 오늘 이 던전들을 최대한 많이 탐험하려 합니다.
  • 유저의 현재 피로도 k와 각 던전별 "최소 필요 피로도", "소모 피로도"가 담긴 2차원 배열 dungeons가 매개변수로 주어질 때, 유저가 탐험할 수 있는 최대 던전 수를 반환해주세요.
  • 제한 사항
    • k는 1 이상 5,000 이하인 자연수
    • dungeons의 세로(행) 길이(즉, 던전의 개수)는 1 이상 8 이하
      • dungeons의 가로(열) 길이 = 2
      • dungeons의 각 행은 각 던전의 ["최소 필요 피로도", "소모 피로도"]
      • "최소 필요 피로도"는 항상 "소모 피로도"보다 크거나 같음
      • "최소 필요 피로도"와 "소모 피로도"는 1 이상 1,000 이하인 자연수
      • 서로 다른 던전의 ["최소 필요 피로도", "소모 피로도"]가 서로 같을 수 있음
  • 입출력 예시
k dungeons result
80 [[80, 20], [50, 40], [30, 10]] 3

 

💻 코드

최종 코드

  • 수정사항
    >> 반복문의 range를 dungeons의 길이 대신 순열 p의 길이 사용

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 1 ~ 3번줄 : 글로벌 변수 및 리스트 생성
  2. 6번줄 : "현재 피로도", 변수, dungeons를 매개변수로 받는 dfs 함수 생성
    1. 7번줄 : 글로벌 변수 answer를 불러옴
    2. 8 ~ 9번줄 : cnt가 answer보다 크다면 answer에 cnt를 저장
    3. 11번줄 : N만큼 반복되는 반복문 실행
      1. 12번줄 : dungeons의 j번째 "최소 필요 피로도"보다 현재 피로도가 크거나 같고, visited의 j번째 값이 0인지 확인하는 조건문 실행
      2. 13번줄 : 조건문이 참이라면 visited의 j번째 값에 1을 저장
      3. 14번줄 : "현재 피로도"에서 "소모 피로도"를 뺀 값, cnt+1, dungeons를 매개변수로 dfs 함수를 재귀적으로 실행
      4. 15번줄 : visited의 j번째 값에 0을 저장
  3. 19번줄 : 글로벌 변수 N, 글로벌 리스트 visited를 불러옴
  4. 20번줄 : N에 dungeons의 길이를 저장
  5. 21번줄 : N의 길이만큼 [0]인 리스트를 visited에 저장
  6. 22번줄 : "현재 피로도", 0, dungeons를 매개변수로 dfs 함수 실행 

 

⚙️ 시행착오

1차 시도

더보기
  • 테스트 결과 : 19개 중 8개 실패 

 

반응형
반응형

🗓️ 문제 설명

  • 셀 수 있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플이라고 합니다.
  • n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수 있습니다.
    • (a1, a2, a3, ..., an)
  • 튜플은 다음과 같은 성질을 가지고 있습니다.
    1. 중복된 원소가 있을 수 있습니다. ex : (2, 3, 1, 2)
    2. 원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서로 다른 튜플입니다. ex : (1, 2, 3) ≠ (1, 3, 2)
    3. 튜플의 원소 개수는 유한합니다.
  • 원소의 개수가 n개이고, 중복되는 원소가 없는 튜플 (a1, a2, a3, ..., an)이 주어질 때(단, a1, a2, ...,an은 자연수), 이는 다음과 같은 집합 기호 '{', '}'를 이용해 표현할 수 있습니다.
    • {{a1}, {a1, a2}, {a1, a2, a3}, ... {a1, a2, a3, ..., an}}
  • 특정 튜플을 표현하는 집합이 담긴 문자열 s가 매개변수로 주어질 때, s가 표현하는 튜플을 배열에 담아 반환해주세요.
  • 제한 사항
    • s의 길이는 5 이상 1,000,000 이하
    • s는 숫자와 '{', '}', ','로만 이루어짐
    • 숫자와 0으로 시작하는 경우는 없음
    • s는 항상 중복되는 원소가 없는 튜플을 올바르게 표현
    • s가 표현하는 튜플의 원소는 1 이상 100,000 이하인 자연수
    • return 하는 배열의 길이가 1 이상 500 이하인 경우만 입력
  • 입출력 예시
s result
"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4]
"{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4]
"{{20,111},{111}}" [111, 20]
"{{123}}" [123]
"{{4,2,3},{3},{2,3,4,1},{2,3}}"
[3, 2, 4, 1]

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 3번줄 : 정규표현식을 이용하여 문자열 s에서 숫자만 추출하여 Counter 함수를 통해 각 숫자와 숫자가 사용된 횟수를 저장
  2. 4번줄 : 각 숫자의 사용횟수를 기준으로 내림차순 정렬하여 리스트에 저장
  3. 4번줄 : 리스트의 각 값을 int 자료형으로 변경 후 list로 변경하여 반환

 

 

반응형
반응형

🗓️ 문제 설명

  • 정수 n, left, right가 주어지고, 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.
    1. n행 n열 크기의 비어있는 2차원 배열을 만듭니다.
    2. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.
      • 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
    3. 1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.
    4. 새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다.
  • 정수 n, left, right가 매개변수로 주어질 때, 주어진 과정대로 만들어진 1차원 배열을 반환해주세요.
  • 제한 사항
    • 1 ≤ n ≤ 10⁷
    • 0 ≤ left ≤ right < n²
    • right - left < 10⁵
  • 입출력 예시
n left right result
3 2 5 [3, 2, 2, 3]
4 7 14 [4, 3, 3, 3, 4, 4, 4, 4]

 

💻 코드

최종 코드

 

코드 풀이

 

 

⚙️ 시행착오

1차 시도

더보기
  • 테스트 결과 : 20개 중 14개 시간초과 실패

 

2차 시도

더보기
  • 테스트 결과 : 20개 중 14개 시간초과 실패

 

반응형
반응형

🗓️ 문제 설명

  • 다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
    • (), [], {} 는 모두 올바른 괄호 문자열입니다.
    • 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A}도 올바른 문자열입니다.
    • 만약 A, B가 올바른 괄호 문자열이라면, AB도 올바른 괄호 문자열입니다.
  • 대괄호, 중괄호, 소괄호로 이루어진 문자열 s가 매개변수로 주어질 때, s를 왼쪽으로 x(0 ≤ x < s의 길이)칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 반환하세요.
  • 제한 사항
    • 1 ≤ s의 길이 ≤ 1000
  • 입출력 예시
s result
"[](){}" 3
"}]()[{" 2
"[)(]" 0
"}}}" 0

 

💻 코드

최종 코드

 

코드 풀이

 

반응형

+ Recent posts