JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제출한 코드 :
def solution(s):
words = s.split(' ')
jaden_case_words = []
for word in words:
if word:
# 첫 문자가 알파벳이면 대문자로 변환, 나머지는 소문자로 변환
jaden_case_words.append(word[0].upper() + word[1:].lower())
else:
# 공백인 경우 그대로 추가
jaden_case_words.append('')
return ' '.join(jaden_case_words)
0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.
1. x의 모든 0을 제거합니다.
2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다.
예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다.
0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.
제출한 코드 :
def solution(s):
answer = [0, 0] # [이진 변환 횟수, 제거된 0의 개수]
# s가 "1"이 될 때까지 반복
while s != "1":
answer[0] += 1 # 이진 변환 횟수 증가
answer[1] += s.count('0') # 0의 개수를 세어 제거된 0의 개수에 추가
s = bin(s.count('1'))[2:] # s에 이진 변환을 적용하여 다음 문자열로 업데이트
return answer
피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.
예를들어
- F(2) = F(0) + F(1) = 0 + 1 = 1
- F(3) = F(1) + F(2) = 1 + 1 = 2
- F(4) = F(2) + F(3) = 1 + 2 = 3
- F(5) = F(3) + F(4) = 2 + 3 = 5
와 같이 이어집니다.
2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.
제출한 코드 :
def solution(n):
fibo = [0, 1] # 초기 피보나치 수열
MOD = 1234567 # 나머지
# n까지 피보나치 수열 계산
for i in range(2, n + 1):
fibo.append((fibo[-1] + fibo[-2]) % MOD)
return fibo[n]
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제출한 코드 :
def solution(brown, yellow):
for i in range(1, yellow + 1):
if yellow % i == 0:
# yellow를 가로와 세로의 길이로 나눔
if 2 * (i + yellow // i) + 4 == brown:
# 갈색 격자 수와 일치하는 경우 가로와 세로의 길이 반환
return [max(i, yellow // i) + 2, min(i, yellow // i) + 2]
△△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 참가자끼리 게임을 진행합니다. 각 게임에서 이긴 사람은 다음 라운드에 진출할 수 있습니다. 이때, 다음 라운드에 진출할 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받습니다. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 됩니다. 게임은 최종 한 명이 남을 때까지 진행됩니다.
이때, 처음 라운드에서 A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자와 몇 번째 라운드에서 만나는지 궁금해졌습니다. 게임 참가자 수 N, 참가자 번호 A, 경쟁자 번호 B가 함수 solution의 매개변수로 주어질 때, 처음 라운드에서 A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자와 몇 번째 라운드에서 만나는지 return 하는 solution 함수를 완성해 주세요. 단, A번 참가자와 B번 참가자는 서로 붙게 되기 전까지 항상 이긴다고 가정합니다.
제출한 코드 :
def solution(n, a, b):
answer = 0
# 대진이 이루어지는 참가자 번호의 범위를 정하고, 두 참가자가 만날 때까지 반복
while a != b:
answer += 1
a = (a + 1) // 2 # 다음 라운드에서의 참가자 번호 계산
b = (b + 1) // 2
return answer