반응형

🗓️ 문제 설명

  • 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 반환해주세요.
  • 제한 사항
    • prices의 각 가격은 1 이상 10,000 이하인 자연수
    • prices의 길이는 2 이상 100,000 이하
  • 입출력 예시
prices return
[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

 

💻 코드

최종 코드

 

코드 풀이

 

반응형
반응형

🗓️ 문제 설명

  • 코니는 매일 다른 옷을 조합하여 입는 것을 좋아합니다.
  • 코니는 각 종류별로 최대 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]]

 

💻 코드

최종 코드

 

코드 풀이

 

반응형
반응형

🗓️ 문제 설명

  • 어떤 자연수로 이루어진 원형 수열의 연속하는 부분 수열의 합으로 만들 수 있는 수가 몇 가지인지 알아보고자 합니다.
  • 원형 수열이란 일반적인 수열에서 처음과 끝이 연결된 형태의 수열을 말합니다.
  • 원형 수열은 처음과 끝이 연결되어 끊기는 부분이 없기 때문에 연속하는 부분 수열도 일반적인 수열보다 많아집니다.
  • 원형 수열의 모든 원소 elements가 순서대로 주어질 때, 원형 수열의 연속 부분 수열 합으로 만들 수 있는 수의 개수를 반환해주세요.
  • 제한 사항
    • 3 ≤ elements의 길이 ≤ 1000
    • 1 ≤ elements의 원소 ≤ 1000
  • 입출력 예시
elements result
[7, 9, 1, 1, 4] 18

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 2번줄 : elements의 길이를 변수 ll에 저장
  2. 3번줄 : 세트 res를 생성
  3. 5번줄 : ll의 길이만큼 반복되는 반복문 실행
  4. 6번줄 : elements의 i번째 값을 ssum에 저장
  5. 7번줄 : ssum을 2번에서 생성한 res에 추가
  6. 8번줄 : i+1에서 i+ll까지 반복되는 반복문 실행
  7. 9번줄 : ssum에 elements[j%ll]번째 값을 더함
  8. 10번줄 : 업데이트한 ssum을 res에 추가
  9. 11번줄 : res의 길이를 반환

 

 

반응형
반응형

🗓️ 문제 설명

  • 00연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) X 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 
  • 아이언 슈트는 건전지로 작동하는데, 순간이동을 하면 건전지 사용량이 줄지 않지만, 앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다.
  • 아이언 슈트 구매자가 이동하려는 거리 N이 주어졌을 때, 사용해야 하는 건전지 사용량의 최솟값을 반환하세요.
  • 제한 사항
    • 숫자 N : 1 이상 10억 이하의 자연수
    • 숫자 K : 1 이상의 자연수
  • 입출력 예시
N result
5 2
6 2
5000 5

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  • 이진법의 경우, 홀수번째에 1이 있기 때문에 주어진 n을 이진법으로 변경한 뒤에 '1'의 갯수를 세면 배터리의 최소 사용량을 확인할 수 있습니다.

 

 

반응형
반응형

🗓️ 문제 설명

  • 정수 x가 주어졌을 때, x가 회문이라면 true를 회문이 아니라면 false를 반환해주세요.
  • 제한 사항
    • -2³¹ ≤ x ≤ 2³¹ - 1
  • 입출력 예시
x result
121 True
-121 False
10 False

 

💻 코드

최종 코드

 

코드 풀이

 

 

반응형
반응형

🗓️ 문제 설명

  • 정수 배열 nums와 정수 target이 주어졌을 때, target과 nums 내의 두 숫자가 같아지는 숫자의 인덱스를 반환해주세요.
  • 제한 사항
    • 동일한 요소를 두 번 사용할 수 없음
    • 각 입력에 정확히 하나의 솔루션이 있음
  • 입출력 예시
nums target result
[2, 7, 11, 15] 9 [0, 1]
[3, 2, 4] 6 [1, 2]
[3, 3] 6 [0, 1]

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. d = {} : 숫자와 인덱스를 담을 딕셔너리 생성
  2. for i, j in enumerate(nums) : nums에서 인덱스와 값을 꺼내는 반복문 실행
  3. r = target - j : target에서 리스트 nums에서 꺼낸 값을 뺀 후 저장
  4. if r in d : return [d[r], i] : 만약 3번에서 저장한 r이 1번에서 생성한 딕셔너리 d에 있다면 r의 인덱스와 현재 값의 인덱스를 반환
  5. d[j] = i : 딕셔너리 d에 값과 인덱스를 key-value 형식으로 저장

 

반응형

+ Recent posts