반응형

🗓️ 문제 설명

  • 주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다.
  • 아래는 하나의 예시를 나타냅니다.
  • 요금표 
기본 시간(분) 기본 요금(원) 단위 시간(분) 단위 요금(원)
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%)

 

반응형
반응형

🗓️ 문제 설명

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

🗓️ 문제 설명

  • 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다.
  • 무지가 개발하려는 시스템은 다음과 같습니다. 
    • 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
      • 신고 횟수에 제한은 없습니다.
      • 서로 다른 유저를 계속해서 신고할 수 있습니다.
    • k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
      • 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다. 
  • 이용자의 ID가 담긴 문자열 배열 id_list, 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열 report, 정지 기준이 되는 신고 횟수 k가 매개변수로 주어질 때, 각 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 반환하세요.
  • 제한 사항
    • 2 ≤ id_list의 길이 ≤ 1000
      • 1 ≤ id_list의 원소 길이 ≤ 10
      • id_list의 원소는 이용자의 id를 나타내는 문자열이며 알파벳 소문자로만 이루어져 있음
      • id_list에는 같은 아이디가 중복해서 들어있지 않음
    • 1 ≤ report의 길이 ≤ 200000
      • 3 ≤ report의 원소 길이 ≤ 21
      • report의 원소는 '이용자 id 신고한 id' 형태의 문자열
      • id는 알파벳 소문자로만 이루어짐
      • 이용자id와 신고한id는 공백 하나로 구분
      • 자기 자신을 신고한 경우는 없음
    • 1 ≤ k ≤ 200, (k는 자연수)
    • id_list에 담긴 id순서대로 각 유저가 받은 결과 메일 수를 배열에 담아 반환
  • 입출력 예시
id_list report k result
["muzi", "frodo", "apeach", "neo"] ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"] 2 [2, 1, 1, 0]
["con", "ryan"] ["ryan con", "ryan con", "ryan con", "ryan con"] 3 [0, 0]

 

💻 코드

최종 코드

  • 수정사항
    >> report 내의 중복값 제거
    >> 시간을 줄이기 위해 반복문, 조건문을 하나 줄임

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 2번줄 : id_list의 길이만큼 0을 갖는 리스트 생성
  2. 3번줄 : id_list의 id를 key로 갖는 딕셔너리 생성
  3. 5번줄 : 중복값을 제거한 후 반복문 실행
  4. 6번줄 : 3번줄에서 생성한 딕셔너리에 있는 신고당한 id에 1을 더함
  5. 8번줄 : 중복값을 제거한 후 반복문 실행
  6. 9~10번줄 : 신고를 당한 횟수가 k 이상이라면 신고를 한 사람 id의 id_list 내에 위치한 인덱스를 통해 answer에 1을 더함

 

⚙️ 시행착오

1차 시도

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

 

반응형
반응형

🗓️ 문제 설명

  • 유저들이 규칙에 맞지 않은 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하고 있습니다.
  • 아이디의 규칙은 다음과 같습니다.
    • 아이디의 길이는 3자 이상 15자 이하여야 합니다.
    • 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)만 사용할 수 있습니다.
    • 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다.
  • 7단계의 순차적인 처리 과정을 통해 신규 유저가 입력한 아이디가 아이디 규칙에 맞는지 검사하고 규칙에 어긋난다면 새로운 아이디를 추천해주려고 합니다.
    1. new_id의 모든 대분를 대응되는 소문자로 치환합니다.
    2. new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
    3. new_id에서 마침표(.)가 2번 이상 연속된 부분은 하나의 마침표(.)로 치환합니다.
    4. new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
    5. new_id가 빈 문자열이라면, new_id에 'a'를 대입합니다.
    6. new_id의 길이가 16자 이상이면 첫 15개의 문자를 제외한 나머지 문자를 모두 제거합니다.
      만약 제거 후 마침포(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.)문자를 제거합니다.
    7. new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
  • 신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, 위 7단계의 처리 과정을 거친 후의 추천 아이디를 반환하세요.
  • 제한 사항
    • new_id는 길이 1이상 1,000이하인 문자열
    • new_id는 알파벳 대문자, 알파벳 소문자, 숫자, 특수문자로 구성
    • new_id에 나타날 수 있는 특수문자는 "-_.~!@#$%^&*()=+[{]}:?,<>/"로 한정됩니다.
  • 입출력 예시
new_id result
"...!@BaT#*..y.abcdefghijklm" "bat.y.abcdefghi"
"z-+.^." "z--"
"=.=" "aaa"
"123_.def" "123_.def"
"abcdefghijklmn.p" "abcdefghijklmn"

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 4번줄 : 주어진 문자열을 소문자로 변경
  2. 6~8번줄 : 문자열을 하나씩 꺼내면서 알파벳, 숫자, '-', '_', '.'만 answer에 붙힘
  3. 10~11번줄 : answer에 '.'가 연속해서 있으면 한개의 '.'로 변경
  4. 13~16번줄 : 문자열의 처음과 끝에 '.'가 있으면 제거
  5. 18~19번줄 : 문자열이 비어있으면 'a'를 추가
  6. 21~24번줄 : 문자열의 길이가 15이상이면 15번째 인덱스에서 잘라주고 마지막 값이 '.'라면 마지막 값을 제거
  7. 26~27번줄 : 문자열의 길이가 3 미만이라면 마지막 값을 부족한 길이만큼 추가해줌

풀이 2번

  1. 5번줄 : 주어진 문자열을 소문자로 변경
  2. 6번줄 : 문자열에서 소문자, 숫자, '-', '_', '.'를 제외한 문자는 제거
  3. 7번줄 : '.'가 연속으로 나오면 하나의 '.'로 대체
  4. 8번줄 : 처음과 마지막 자리에 '.'가 나온다면 제거
  5. 9번줄 : 문자열이 비어있다면 'a'를 아니라면 15번째 인덱스에서 자른 문자열을 저장
  6. 10번줄 : 8번줄과 동일(처음과 마지막 자리에 '.'가 나온다면 제거)
  7. 11번줄 : 문자열의 길이가 2이상이라면 있는 그대로 저장하고, 아니라면 부족한 길이만큼 마지막 문자열을 더해서 저장

 

 

알게된 점

더보기

string = string if 조건 else 조건

문자열은 위와 같은 형태가 가능하다는 사실!

반응형
반응형

🗓️ 문제 설명

  • 다트 게임은 다트판에 다트를 세차례 던져 그 점수를 합계로 실력을 겨루는 게임입니다.
  • 다트 게임의 점수 계산 로직은 아래와 같습니다.
    1. 다트 게임은 총 3번의 기회로 구성됩니다.
    2. 각 기회마다 얻을 수 있는 점수는 0점에서 10점까지입니다.
    3. 점수와 함께 single(S), double(D), triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱으로 계산됩니다.
    4. 옵션으로 스타상(*), 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만들고, 아차상(#) 당첨 시 해당 점수만 마이너스됩니다.
    5. 스타상(*)은 첫 번째 기회에서도 나올 수 있는데, 이 경우 첫 번째 스타상(*)의 점수만 2배가 됩니다.
    6. 스타상(*)의 효과는 다른 스타상(*)의 효과와 중첩될 수 있으며, 이 경우 중첩된 스타상(*) 점수는 4배가 됩니다.
    7. 스타상(*)의 효과는 아차상(#)의 효과와 충접될 수 있으며, 이 경우 중첩된 아차상(#) 점수는 -2배가 됩니다.
    8. 영역 single(S), double(D), triple(T)은 점수마다 하나씩 존재합니다.
    9. 스타상(*), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있습니다.
  • 0 ~ 10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하세요.
  • 입출력 예시
dartResult return
'1S2D*3T' 37
'1D2S#10S' 9
'1D2S0T' 3
'1S*2T*3S' 23
'1D#2S*3S*' 5
'1T2D3D#' -4
'1D2S3T*' 59

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 4번줄 : 다트 결과 속에 10점을 k로 변경
  2. 5번줄 : 다트 결과를 리스트로 저장하고 k를 10으로 저장
  3. 8번줄 : 다트의 영역(S,D,T)을 리스트로 저장
  4. 9번줄 : 다트 결과를 하나씩 꺼내는 반복문 실행
  5. 10번줄 : 값이 다트 영역(S,D,T)이라면 해당 시도의 점수에 연산을 진행하여 저장
  6. 12번줄 : 값이 스타상(*)이라면 해당 시도의 점수에 2배를 하고, 첫 시도가 아니라면 이전 시도의 점수에도 2배를 함
  7. 16번줄 : 값이 아차상(#)이라면 해당 시도의 점수에 -1배를 함
  8. 18번줄 : 값이 점수라면 answer에 추가하고 인덱스에 1을 더해줌
  9. 21번줄 : answer을 총합하여 반환
  • answer에는 숫자만 들어가기 때문에 i(index)를 -1부터 시작하여 숫자를 넣을 때마다 1씩 더해줌

 

 

사용 함수

더보기
  • re.compile('정규표현식') : 찾고자 하는 정규표현식 패턴을 저장
  • pattern.findall('string') : 문자열 속에서 패턴과 같은 형태를 모두 찾아 리스트로 저장
반응형
반응형

🗓️ 문제 설명

  • 나만의 카카오 성격 유형 검사지를 만드려고 합니다.
  • 성격 유형 검사는 4개의 지표에 따라 두 유형 중 하나로 결정됩니다.
1번 지표 라이언형(R) 튜브형(T)
2번 지표 콘형(C) 프로도형(F)
3번 지표 제이지형(J) 무지형(M)
4번 지표 어피치형(A) 네오형(N)
  • 검사지에는 총 n개의 질문이 있고, 각 질문에는 (매우 비동의, 비동의, 약간 비동의, 모르겠음, 약간 동의, 동의, 매우 동의)와 같은 7개의 선택지가 있습니다.
  • 각 선택지는 고정적인 크기의 점수를 가집니다.
  • 매우 동의와 매우 비동의는 3점, 동의와 비동의는 2점, 약간 동의와 약간 비동의는 1점, 모르겠음은 0점입니다.
  • 검사 결과는 모든 질문의 성격 유형 점수를 더하여 각 지표에서 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단합니다. 단, 하나의 지표에서 각 성격 유형 점수가 같으면 사전순으로 빠른  성격 유형을 검사자의 성격 유형이라고 판단합니다.
  • 질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey와 검사자가 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices가 매개변수로 주어집니다.
  • 검사자의 성격 유형 검사 결과를 지표 번호 순서대로 반환하세요.
  • 제한 사항
    • 1 ≤ survey의 길이 ≤ 1000
      • survey의 원소는 'RT', 'TR', 'FC', 'CF', 'MJ', 'JM', 'AN', 'NA' 중 하나
      • survey[i]의 첫번재 캐릭터는 i+1번 질문의 비동의 관련 선택지를 선택하면 받는 성격 유형
      • survey[i]의 두번째 캐릭터는 i+1번 질문의 동의 관련 선택지를 선택하면 받는 성격 유형
    • choices의 길이 = survey의 길이
      • choices[i]는 검사자가 선택한 i+1번째 질문의 선택지
      • 1 ≤ choices의 원소 ≤ 7
      • 1은 매우 비동의, 7은 매우 동의를 의미
  • 입출력 예시
survey choices return
['AN', 'CF', 'MJ', 'RT', 'NA'] [5, 3, 2, 7, 5] 'TCMA'
['TR', 'RT', 'TR'] [7, 1, 3] 'RCJA'

 

💻 코드

최종 코드

 

코드 풀이

 

반응형
반응형

🗓️ 문제 설명

  • 스마트폰 전화 키패드의 각 칸에는 숫자들이 적혀 있습니다.
  • 전화 키패드에서 왼손과 오른손의 엄지손가락만큼 이용해 숫자만을 입력하려고 합니다.
  • 맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
    1. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 간은 거리로 1에 해당합니다.
    2. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다.
    3. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다.
    4. 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.
      1. 만약 두 엄지손가락의 거리가 같다면 오른손잡이는 오른손 엄지손가락, 왼손잡이는 외손 엄지손가락을 사용합니다.
  • 순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인지를 나타내는 문자열 hand가 매개변수로 주어집니다.
  • 각 번호를 누른 엄지손가락이 왼손인지 오른손인지를 나타내는 연속된 문자열 형태로 반환하세요.
  • 제한 사항
    • 1 ≤ numbers 배열의 크기 ≤ 1000
    • 0 ≤ numbers 배열 원소의 값 ≤ 9
    • hand는 'left' 또는 'right'
    • 왼손 엄지손가락을 사용한 경우는 L, 오른손 엄지손가락을 사용한 경우는 R을 순서대로 이어붙여 문자열 형태로 반환해주세요.
  • 입출력 예시
numbers hand result
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] 'right' 'LRLLLRLLRRL'
[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] 'left' 'LRLLRRLLLRR'
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0] 'right' 'LLRLLRLLRL'

 

💻 코드

최종 코드

  • 수정 사항
    >> 인접리스트를 키패드의 위치정보로 변경
    >> 인접리스트에서 거리값을 꺼내는 형식에서 맨허튼 거리를 구해 비교하는 방식으로 변경

 

코드 풀이

 

 

⚙️ 시행착오

1차 시도

더보기
  • 런타임 에러 발생

 

반응형
반응형

🗓️ 문제 설명

  • 실패율을 구하는 코드를 완성하려고 합니다.
  • 실패율은 (스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수)로 구할 수 있습니다.
  • 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 주어집니다.
  • 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 반환하세요.
  • 제한 사항
    • 1 ≤ 스테이지의 개수 N ≤ 500
    • 1 ≤ stages의 길이 ≤ 200000
    • stages에는 1이상 N+1이하의 자연수가 담겨있음
       >> stages의 자연수는 사용자가 현재 도전중인 스테이지의 단계
       >> N+1은 마지막 스테이지까지 클리어한 사용자
    • 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 함
    • 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0으로 정의
  • 입출력 예시
N stages result
5 [2, 1, 2, 6, 2, 4, 3, 3] [3, 4, 2, 1, 5]
4 [4, 4, 4, 4, 4] [4, 1, 2, 3]

 

💻 코드

최종 코드

  • 수정 사항
    >> 실패율이 0인 경우의 불필요한 계산을 줄이기 위해 cnt가 0인 경우를 조건문으로 추가
    >> stages를 정렬하여 불필요한 반복문을 제거

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 2번줄 : 실패율을 저장할 딕셔너리 생성
  2. 3번줄 : stages의 길이를 분모로 저장
  3. 4번줄 : stage 1 부터 stage N 까지 반복하는 반복문 생성
  4. 5번줄 : 분모가 0인지 확인
  5. 6번줄 : stage에 머물러있는 사람 수를 저장
  6. 7번줄 : result에 stage와 실패율을 저장
  7. 8번줄 : 다음 stage를 통과하는 사람 수를 분모에 저장
  8. 9번줄 : 분모=0 이라면 남은 스테이지의 실패율은 0으로 저장
  9. 11번줄 : 실패율을 기준으로 스테이지를 정렬하여 반환

 

⚙️ 시행착오

1차 시도

더보기
  • 테스트 케이스 1, 6, 7, 9, 13, 23, 24, 25에서 런타임 에러 발생

 

반응형
반응형

🗓️ 문제 설명

  • 주어진 문자열은 일부 자릿수가 영단어로 바뀐 경우가 존재합니다.
  • 숫자가 영단어로 바뀐 경우, 영단어를 원래 숫자로 바꾸어 반환하세요.
  • 제한 사항
    • 1 ≤ s의 길이  ≤ 50
    • s가 'zero' 또는 '0'으로 시작하는 경우는 주어지지 않음
    • return 값이 1이상 2000000000이하의 정수가 되는 올바른 입력만 s로 주어짐
  • 입출력 예시
s result
'one4seveneight' 1478
'23four5six7' 234567
'2three45sixseven' 234567
'123' 123

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 2번줄 : 숫자 영단어가 담긴 리스트 선언
  2. 4번줄 : 리스트의 길이만큼 반복되는 반복문 실행
  3. 5번줄 : 리스트의 영단어를 인덱스로 변경
  4. 7번줄 : 문자열을 숫자로 변경하여 반환

 

반응형
반응형

🗓️ 문제 설명

  • 네오는 프로도가 비상금을 숨겨놓은 장소를 알려줄 비밀지도를 손에 넣었습니다.
  • 지도는 한 변의 길이가 n인 정사각형 배열 형태로 각 칸은 공백(' ') 또는 벽('#') 두 종류로 이루어져 있습니다.
  • 전체 지도는 2장의 지도를 겹쳐서 얻을 수 있으며, 지도 1과 지도 2에서 하나라도 벽인 부분은 전체 지도에서도 벽입니다.
  • 2장의 지도에서 모두 공백인 부분은 전체 지도에서도 공백입니다.
  • 지도 1과 지도 2는 각각 정부 배열로 암호화되어 있습니다.
  • 암호화된 지도에서 벽 부분은 1, 공백 부분은 0으로 부호화했을 때, 얻어지는 이진수에 해당하는 값의 배열입니다.
  • 제한 사항
    • 1 ≤ n ≤ 16
    • arr1, arr2는 길이 n인 정수 배열
    • 정부 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하
  • 입출력 예시
n arr1 arr2 출력
5 [9, 20, 28, 18, 11] [30, 1, 21, 17, 28] ['#####', '# # #', '### #', '#  ##', ' #####']
6 [46, 33, 33, 22, 31, 50] [27, 56, 19, 14, 14, 10] ['######', '###  #', '##  ##', ' #### ', ' #####', '### # ']

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 3번줄 : arr1과 arr2의 원소 i, j를 꺼내는 반복문
  2. 4번줄 : i와 j의 이진수 값을 or로 묶어서 'b'아래의 부분만 저장
  3. 5번줄 : 4번줄에서 만든 값의 오른쪽에 0을 채워넣음
  4. 6번줄 : '1'을 '#'으로 변경(1을 벽으로 변경)
  5. 7번줄 : '0'을 ' '으로 변경(0을 공백으로 변경)
  6. 8번줄 : 벽과 공백으로 바꾼 값을 answer에 추가하여 반환

 

 

사용 함수

더보기
  • bin(number) : number를 이진수로 변경
  • func.zfill(n) : n의 자릿수만큼 0을 채움
반응형

+ Recent posts