반응형

🗓️ 문제 설명

  • 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개 실패 

 

반응형
반응형

🗓️ 문제 설명

  • XYZ 마트는 일정한 금액을 지불하면 10일 동안 회원 자격을 부여합니다.
  • XYZ 마트에서는 회원을 대상으로 매일 한 가지 제품을 할인하는 행사를 합니다.
  • 할인하는 제품은 하루에 하나씩만 구매할 수 있습니다.
  • 알뜰한 정현이는 자신이 원하는 제품과 수량이 할인하는 날짜와 10일 연속으로 일치할 경우에 맞춰서 회원가입을 하려 합니다.
  • 정현이가 원하는 제품을 나타내는 문자열 배열 want와 정현이가 원하는 제품의 수량을 나타내는 정수 배열 number, XYZ 마트에서 할인하는 제품을 나타내는 문자열 배열 discount가 주어졌을 때, 회원등록시 정현이가 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 반환하세요.
  • 제한 사항
    • 1 ≤ want의 길이 = number의 길이 ≤ 10
      • 1 ≤ number의 원소 ≤ 10
      • number[i]는 want[i]의 수량을 의미하며, number의 원소의 합은 10
    • 10 ≤ discount의 길이 ≤ 100,000
    • want와 discount의 원소들은 알파벳 소문자로 이루어진 문자열
      • 1 ≤ want의 원소의 길이, discount의 원소의 길이 ≤ 12
  • 입출력 예시
want number discount result
["banana", "apple", "rice", "pork", "pot"] [3, 2, 2, 2, 1] ["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"] 3
["apple"] [10] ["banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana"] 0

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 4번줄 : 딕셔너리 선언
  2. 5번줄 : want의 길이만큼 돌아가는 반복문 실행
  3. 6번줄 : 4번줄에서 선언한 딕셔너리의 키를 want의 i번째 값으로, 값을 number의 i번째 값으로 저장
  4. 8번줄 : discount의 길이에서 9를 뺀 값만큼 돌아가는 반복문 실행
  5. 9번줄 : discount의 i번째부터 10개의 값과 4번줄에서 선언한 딕셔너리가 같은지 확인
  6. 10번줄 : answer에 1을 추가

 

⚙️ 시행착오

1차 시도

더보기
  • 테스트 결과 : 1개 실패

 

반응형
반응형

🗓️ 문제 설명

  • 셀 수 있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플이라고 합니다.
  • 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

 

💻 코드

최종 코드

 

코드 풀이

 

반응형
반응형

🗓️ 문제 설명

  • ㅇㅇ게임 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다.
  • N명의 참가자는 각각 1부터 N번을 차례대로 배정받고, N-1번과 N번의 참가자끼지 게임을 진행합니다.
  • 각 게임에서 이긴 사람은 다음 라운드에 진출하고, 다음 라운드에 진출할 참가자의 번호는 다시 1부터 N/2번을 차례대로 배정받으며 게임은 최종 한 명이 남을 때까지 진행됩니다.
  • 게임 참가자 수 N, 참가자 번호 A, 경쟁자 번호 B가 매개변수로 주어질 때, 처음 라운드에서 A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자와 몇 번째 라운드에서 만나는지 반환하세요.
  • 단, A번 참가자와 B번 참가자는 서로 붙게 되기 전까지 항상 이긴다고 가정합니다.
  • 제한 사항
    • N : 2¹ 이상 2²⁰ 이하인 자연수
    • A, B : N 이하인 자연수(A ≠ B)
    • 부전승은 발생하지 않음
  • 입출력 예시
N A B answer
8 4 7 3

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  • ^ : XOR 연산으로 2진수인 두 수의 각 자리수가 서로 다른 값을 가질 때, 1을 반환합니다.
    • 예시) 문제의 입출력 예시인 4와 7을 예로 들면 4의 이진수는 '100', 7의 이진수는 '111'이기 때문에, 4^7은 '011'인 3을 반환하게 됩니다. 
  • bit_length() : 2진수의 길이를 반환하는 함수입니다.
  • 풀이 해석
    • 아래의 이미지는 N=8인 경우의 대진표입니다. 만일 a = 4, b = 7 인 경우를 살펴보면 a^b는 3(11)이 나옵니다. 그래서 bit_length()를 적용하게 되면 2가 반환됩니다. 하지만 (a-1)^(b-1)을 하면 5(101)이 나오기 때문에 bit_length()를 적용하면 3이 반환됩니다.
     

 

반응형
반응형

🗓️ 문제 설명

  • 기능 개선 작업을 수행 중인데, 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
  • 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있으며 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
  • 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때, 각 배포마다 몇 개의 기능이 배포되는기 반환하세요.
  • 제한 사항
    • 작업의 개수(progresses, speeds 배열의 길이)는 100개 이하
    • 작업 진도는 100미만의 자연수
    • 작업 속도는 100이하의 자연수
    • 배포는 하루에 한번만 가능
  • 입출력 예시
progresses speeds return
[93, 30, 55] [1, 30, 5] [2, 1]
[95, 90, 99, 99, 80, 99] [1, 1, 1, 1, 1, 1] [1, 3, 2]

 

💻 코드

최종 코드

 

코드 풀이

 

 

⚙️ 시행착오

1차 시도

더보기
  • 테스트 결과 실패(4/11 정답)
반응형
반응형

🗓️ 문제 설명

  • 중앙에는 노란색이 칠해져 있고, 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫이 있습니다.
  • 갈색 격자의 수 brown과 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 반환하세요.
  • 제한 사항
    • 갈색 격자의 수 brwon은 8 이상 5,000 이하인 자연수
    • 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수
    • 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 김
  • 입출력 예시
brown yellow return
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 2번줄 : brown을 2로 나누어 1을 더함 값을 가로에 저장
  2. 3번줄 : 세로에 1을 저장
  3. 4번줄 : 가로가 세로보다 크다면 계속되는 반복문 실행
  4. 5번줄 : (가로-2)와 (세로-2)를 곱한 값이 yellow와 같다면 [가로, 세로]를 반환
  5. 7~8번줄 : 가로는 1을 빼고, 세로는 1을 더함

 

반응형
반응형

🗓️ 문제 설명

  • 캐시 크기(cacheSize)와 도시이름 배열(cities)가 주어지고 입력된  도시이름 배열을 순서대로 처리할 때, 발생한 총 실행시간을 출력하는 코드를 작성해주세요.
  • 캐시 교체 알고리즘은 LRU(Least Recently Used)를 사용하여 cache hit일 경우에는 실행시간이 1이고, cache miss일 경우에는 실행시간은 5입니다.
  • 제한 사항
    • cacheSize는 정수이며, 범위는 0 ≤ cacheSize  30
    • cities는 도시 이름으로 이뤄진 문자열 배열, 최대 도시 수는 100,000개
    • 각 도시 이름은 공백, 숫자, 특수문자 등이 없는 영문자로 구성되며, 대소문자 구분은 없음
    • 도시 이름은 최대 20자
  • 입출력 예시
캐시크기(cacheSize) 도시이름(cities) 실행시간
3 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"] 50
3 ["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"] 21
2 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"] 60
5 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"] 52
2 ["Jeju", "Pangyo", "NewYork", "newyork"] 16
0 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA"] 25

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 2~3번줄 : 최대 길이를 cacheSize로 지정한 deque 생성
  2. 5번줄 : 도시 배열에서 도시를 하나씩 꺼내는 반복문 실행
  3. 6번줄 : 도시를 소문자로 저장
  4. 7~8번줄 : 도시가 캐시에 있다면 도시를 제거하고, 도시를 다시 추가
  5. 10번줄 : 시간에 1을 더함
  6. 11~12번줄 : 도시가 캐시에 없다면 도시를 추가
  7. 13번줄 : 시간에 5를 더함

 

 

알게된 점

더보기
  • LRU(Least Recently Used) 알고리즘 : 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법
    • 캐시가 사용하는 리소스의 양이 제한되어 있고, 캐시는 제한된 리스트 내에서 데이터를 빠르게 접근할 수 있어야 함
    • 장점
      • 빠른 액세스 : 가장 최근에 사용한 아이템부터 정렬
      • 빠른 업데이트 : 하나의 아이템에 액세스 할때마다 업데이트
    • 단점
      • 많은 공간 차지
반응형

+ Recent posts