2024/12 154

시저 암호

[문제] 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.  [풀이]아스키 코드를 이용해서 문제를 풀면 된다. A~Z 는 아스키 코드로 65 ~ 90a ~ z 는 아스키 코드로 97 ~ 122  ord 함수로 문자를 아스키 코드로 변환할 수 있으며, chr 함수로 아스키 코드를 문자로 변환할 수 있다. 문자가 문자를 나타내는 아스키 코드 범위 밖으로 나가지 않도록 작업을 해줘야 한다. (랩어라운드라고 한다)(ord(문자)..

삼총사

[문제]한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다. 한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요...

이상한 문자 만들기

[문제] 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.  [풀이]split 함수로 공백을 기준으로 단어를 나눠보자. 여기서 단어 사이의 공백이 두 개 이상일 경우 하나를 제외한 나머지는 빈 문자열로 저장된다. 나눈 단어들을 하나씩 꺼내서 인덱스가 홀수인지 짝수인지에 따라 대소문자 처리를 해준다. 이를 편히 하기 위해 단어들을 꺼낼 때 enumerate를 사용한다. 대소문자 처리한 단어들을 join 함수로 빈문자열로 연결하고, 그런 단어들을 또 join함수로 처리하되 이번엔 공백으로 연결한다. def solution(s)..

3진법 뒤집기

[문제]자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.  [풀이]먼저 10진법에서 3진법으로 변환하는 과정을 살펴보자.123 ÷ 3 = 41 나머지 0         41 ÷ 3 = 13 나머지 2            13 ÷ 3 = 4 나머지 1         4 ÷ 3 = 1 나머지 1           1 ÷ 3 = 0 나머지 1 몫이 0이 되었다면 나머지 부분을 아래서 위로(역순으로) 읽어준다.123을 3진법으로 변환하면 11120이 된다. 이를 이용해서 n을 3진법으로 변환해준 뒤 문제서 요구한대로 뒤집어주면 되는데 뒤집을 필요없이 나머지를 구하는 과정에서 역순이 아닌 원래 순..

최대공약수와 최소공배수

[문제] 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다. [풀이]유클리드 호제법을 이용해서 문제를 풀어보자. 이는 최대공약수를 효율적으로 계산하는 알고리즘이다.a > b 일 때 a 와 b 의 최대공약수는  b 와  a % b 의 최대공약수와 같다.a % b 가 0이 될 때 b가 최대공약수가 된다. a 와 b 의 최대공약수와 최소공배수 사이에는 다음과 같은 관계가 성립한다.최소공배수 = a x b / 최대공약수이를 활용하여 최소공배수를 구해보자def..

행렬의 덧셈

[문제] 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.  [풀이]arr1 = [[1, 2], [2, 3]] arr2 = [[3, 4], [5, 6]] 두 배열(행렬)을 덧셈해서 [[4, 6], [7, 9]]를 만들어야 한다.1과 3을, 2와 4를, 2와 5를, 3과 6를 더해야 한다 zip을 이용해 풀어보자zip(arr1, arr2) 를 하면 다음과 같다. 1번 요소 ([1, 2], [3, 4])2번 요소 ([2, 3], [5 ,6])arr1[0] 과 arr2[0] 을 묶고, arr1[1] 과 arr2[1] 을 묶어주는 것이다. 요소 하나..

부족한 금액 계산하기

[문제] 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.단, 금액이 부족하지 않으면 0을 return 하세요. [풀이]이 문제도 규칙을 잘 찾으면 효율적으로 풀 수 있는 문제다. n번 탄다고 했을 때100 + 200 + 300 ... (100 * 1) + (100 * 2) + (100 * 3) ... + (100 * n)100 * (1 +..

약수의 개수와 덧셈

[문제] 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.  [풀이]이 문제는 어떤 정수의 약수의 개수가 홀수인지 짝수인지 판별하는 방법만 알면 효율적으로 풀 수 있다.약수는 쌍으로 존재하는데, 제곱수의 경우 그 쌍이 자기 자신이다. 즉, 제곱수의 약수의 개수는 홀수개이다.이를 이용해 문제를 풀어보자 def solution(left, right): return sum(-n if (n**0.5).is_integer() else n for n in range(left, right+1))

음양 더하기

[문제] 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요. absolutes = [4, 7, 12]signs = [true, false, true] [풀이]이 문제는 zip함수와 리스트컴프리헨션에서 if문을 어떻게 사용하는지를 알아봅시다zip(absolutes, signs)를 하게 되면 각 인덱스별로 요소들을 튜플로 묶어줍니다(4, true), (7, false), (12, true) 이를 for문으로 가져와서 num과 sign 변수에 한번에 할당한다. 이를 언패킹이라고 한다그리고 리스트 컴프리헨션에..

두 정수 사이의 합

[문제] 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 이 문제는 이렇게 풀 수 있다. 예를 들어7, 8, 9, 10, 11, 12, 13 이 있다면13, 12, 11, 10, 9, 8, 7 처럼 뒤집어서-------------------------------20, 20, 20, 20, 20, 20, 20 더해준다. 그러면 처음과 마지막을 더한 값이 수 갯수만큼 나오는걸 알 수 있다. 다 더해서 2로 나누면 7과 13 사이에 속한 모든 정수의 합을 구할 수 있다. O(1)로 풀 수 있는 문제다.def solution(a, b): ..