반응형

🗓️ 문제 설명

  • 햄버거 가게에서 일을 하는 상수는 햄버거를 포장하는 일을 합니다.
  • 다른 직원들이 재료를 조리해주면 상수의 앞에 아래에서부터 위로 쌓이게 되고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장합니다.
  • 재료가 정해진 순서(아래서부터, 빵-야채-고기-빵)로 놓였을 때만 햄버거를 포장하며 추가적인 재료는 들어오지 않습니다.
  • 상수에게 전해지는 재료의 정보를 나타내는 정수 배열 ingredient가 주어졌을 때, 상수가 포장하는 햄버거의 개수를 반환하세요.
  • 제한 사항
    • 1 ≤ ingredient의 길이 ≤ 1000000
    • ingredient의 원소는 1, 2, 3 중 하나의 값이며, 순서대로 빵, 야채, 고기를 의미
  • 입출력 예시
ingredient result
[2, 1, 1, 2, 3, 1, 2, 3, 1] 2
[1, 3, 2, 1, 2, 1, 3, 1, 2] 0

 

💻 코드

최종 코드

  • 수정사항
    >> stack을 리스트에서 문자열로 변경

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 2번줄 : 값을 저장할 리스트 생성
  2. 3번줄 : 만들 수 있는 햄버거 개수를 카운팅하는 변수 생성
  3. 4번줄 : ingredient에서 값을 하나씩 꺼내는 반복문 실행
  4. 5번줄 : 반복문을 통해 꺼낸 값을 리스트 s에 추가
  5. 6~7번줄 : 리스트 s의 마지막 4개가 [1, 2, 3, 1]일 경우 cnt에 1을 더함
  6. 8~9번줄 : 리스트 s의 마지막 4개 값을 제거

 

⚙️ 시행착오

1차 시도

더보기
  • 테스트 2개 시간초과로 실패
반응형
반응형

🗓️ 문제 설명

  • 문자열 s는 한 개 이상의 단어로 구성되어 있고, 각 단어는 하나 이상의 공백 문자로 구분되어 있습니다.
  • 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 반환하세요.
  • 제한 사항
    • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단
    • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리
  • 입출력 예시
s return
'try hello world' 'TrY HeLlo WoRlD'

 

💻 코드

최종 코드

  • 수정사항
    >> 문자열을 공백기준으로 분리하여 리스트에서 문자열을 꺼내고, 문자열의 길이만큼 반복하는 이중반복문으로 수정

 

코드 풀이

 

 

⚙️ 시행착오

1차 시도

 

반응형
반응형

🗓️ 문제 설명

  • 유저들이 규칙에 맞지 않은 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하고 있습니다.
  • 아이디의 규칙은 다음과 같습니다.
    • 아이디의 길이는 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 조건

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

반응형
반응형

🗓️ 문제 설명

  • 학생들은 각자 정수 번호를 가지고 있으며, 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다.
  • 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 반환하세요.
  • 제한 사항
    • 3 ≤ number의 길이 ≤ 13
    • -1000 ≤ number의 각 원소 ≤ 1000
    • 서로 다른 학생의 정수 번호가 같을 수 있음
  • 입출력 예시
number result
[-2, 3, 0, 2, -5] 2
[-3, -2, -1, 0, 1, 2, 3] 5
[-1, 1, -1, 1] 0

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 4번줄 : 전체 길이의 -2까지 반복하는 반복문 실행
  2. 5번줄 : 4번줄의 반복문 인덱스 + 1부터 전체 길이의 -1까지 반복하는 반복문 실행
  3. 6번줄 : 5번줄의 반복문 인덱스 + 1부터 전체 길이까지 반복하는 반복문 실행
  4. 7~8번줄 : 4~6번줄에서 꺼낸 인덱스의 number 값을 더한 값이 0이면 answer에 +1을 함
  5. 11번줄 : answer를 반환

 

반응형
반응형

🗓️ 문제 설명

  • 가로 길이가 2이고 세로의 길이가 1인 직사각형 모양의 타일이 있습니다.
  • 이 직사각형 타일을 이용하여 세로의 길이가 2이고, 가로의 길이가 n인 바닥을 가득 채우려고 합니다.
  • 바닥을 채울 때는 타일을 가로 혹은 세로로 배치하는 2가지 방법이 있습니다.
  • 직사각형의 가로 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 반환하세요.
  • 제한 사항
    • 가로 길이 n은 60000이하의 자연수
    • 경우의 수가 많아질 수 있으므로, 경우의 수를 1000000007로 나눈 나머지를 반환
  • 입출력 예시
n result
4 5

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  • n번째 피보나치 수를 구하는 방식
  1. 2번줄 : 변수 a, b에 1을 저장
  2. 3~4번줄 : n-1번 반복하는 반복문을 통해 a와 b에 피보나치 수를 저장
                   : a에는 b를 저장하고, b에는 a+b를 더한 수에 1000000007을 뺀 값을 저장
  3. 5번줄 : n을 1과 2로 만들 수 있는 경우의 수 b를 반환

 

반응형
반응형

🗓️ 문제 설명

  • 두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다).
  • X, Y의 짝궁이 존재하지 않으면, 짝꿍은 -1이고, X, Y의 짝꿍이 0으로만 구성되어 있다면 짝꿍은 0입니다.
  • 두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 반환하세요.
  • 제한 사항
    • 3 ≤ X, Y의 길이(자릿수) ≤ 3000000
    • X, Y는 0으로 시작하지 않음
    • X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로 문자열로 반환
  • 입출력 예시
X Y result
"100" "2345" "-1"
"100" "203045" "0"
"100" "123450" "10"
"12321" "42531" "321"
"5525" "1255" "552"

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 4번줄 : 9부터 0까지 하나씩 내려가는 반복문 시행
  2. 5번줄 : 반복문에서 꺼낸 숫자를 X와 Y에 중복된 개수만큼 answer에 저장 
  3. 7~8번줄 : answer가 빈값이면 '-1'을 반환
  4. 9~10번줄 : answer의 길이와 answer에서 '0'의 개수가 같으면 '0'을 반환(answer에 0만 존재하면)
  5. 12번줄 : answer 반환
반응형
반응형

🗓️ 문제 설명

  • 당구대의 가로 길이 m, 세로 길이 n과 쳐야 하는 공이 놓인 위치 좌표를 나타내는 두 정수 startX, startY, 그리고 매 회마다 목표로 해야하는 공들의 위치 좌표를 나타내는 정수 쌍들이 들어있는 2차원 정수배열 balls가 주어집니다. 
  • "원쿠션" 연습을 위해 공을 적어도 벽에 한 번은 맞춘 후 목표 공에 맞힌다고 할 때, 각 회마다 공이 굴러간 거리의 최솟값의 제곱을 배열에 담아 반환하세요.
  • 단, 공이 벽에 부딪힐 때, 진행 방향은 항상 입사각과 반사각이 동일하며, 만약 꼭짓점에 부딪힐 경우 진입 방향의 반대 반향으로 공이 진행됩니다. 
  • 제한 사항
    • 3 ≤ m, n ≤ 1000
    • 0 < startX < m
    • 0 < startY < n
    • 2 ≤ balls의 길이 ≤ 1000
    • balls의 원소는 [a, b] 형태
      • a, b는 머쓱이가 맞춰야 할 공이 놓인 좌표를 의미
      • 0 < a < m, 0 < b < n
      • (a, b) = (startX, startY)인 입력은 들어오지 않음
  • 입출력 예시
m n startX startY balls result
10 10 3 7 [[7, 7], [2, 7], [7, 3]] [52, 37, 116]

 

💻 코드

최종 코드

  • 수정사항
    >> 동일한 선상에서 가로 혹은 세로로 원쿠션했을 때의 거리를 추가

 

코드 풀이

 

 

⚙️ 시행착오

1차 시도

더보기
  • 테스트 케이스에서 실패 존재

 

반응형
반응형

🗓️ 문제 설명

  • S사에서는 각 부서에 필요한 물품을 지원해주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다.
  • 전체 예산이 정해져 있기 때문에 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다.
  • 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다.
  • 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 반환하세요.
  • 제한 사항
    • d는 부서별로 신청한 금액이 들어있는 배열이며, 길이(전체 부서의 개수)는 1 이상 100 이하
    • d의 각 원소는 부서별로 신청한 금액을 나타내며, 부서별 신청 금액은 1 이상 100000 이하의 자연수
    • budget은 예산을 나타내며, 1 이상 10000000 이하의 자연수
  • 입출력 예시
d budget result
[1, 3, 2, 5, 4] 9 3
[2, 2, 3, 3] 10 4

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 2번줄 : 주어진 d를 정렬
  2. 3번줄 : 반복문을 돌면서 d의 총합과 예산을 비교
  3. 4번줄 : d의 총합이 크다면 d의 마지막 값을 삭제
  4. 5번줄 : d의 총합이 예산보다 작다면 d의 길이를 반환

 

반응형
반응형

🗓️ 문제 설명

  • 다트 게임은 다트판에 다트를 세차례 던져 그 점수를 합계로 실력을 겨루는 게임입니다.
  • 다트 게임의 점수 계산 로직은 아래와 같습니다.
    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'

 

💻 코드

최종 코드

 

코드 풀이

 

반응형

+ Recent posts