티스토리 뷰

728x90

[ 코딩 테스트 연습 ]

 
 
 
 
 
 

141. 자릿수 더하기 

  • 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
    예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
  • 제한사항 :
    • N의 범위 : 100,000,000 이하의 자연수
  • 내가 푼 풀이
def solution(n):
    return sum(int(i) for i in str(n))

print(solution(123))
# 출력 : 6

 

 

 

 

 

 

 

 

142. 약수의 합  

  • 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
  • 제한사항 : n은 0 이상 3000이하인 정수입니다.
  • 내가 푼 풀이
def solution(n):
    n_sum = 0
    for i in range(1,n+1):
        if n % i == 0:
            n_sum += i
    return n_sum

print(solution(12))
# 출력 : 28

 

  • 다른 사람의 풀이
def sumDivisor(num):
    # num / 2 의 수들만 검사하면 성능 약 2배 향상잼
    return num + sum([i for i in range(1, (num // 2) + 1) if num % i == 0])
def sumDivisor(num):
    return sum([i for i in range(1,num+1) if num%i==0])

 

 

 

 

 

 

 

 

 

 

143. 자연수 뒤집어 배열로 만들기   

  • 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. .
  • 제한사항 : n은 10,000,000,000이하인 자연수입니다.
  • 내가 푼 풀이
def solution(num):
    return [int(i) for i in str(num)][::-1]

print(solution(12345))
# 출력 : [5, 4, 3, 2, 1]

 

  •  다른 사람의 풀이 
def digit_reverse(n):
    return list(map(int, reversed(str(n))))
def digit_reverse(n):
    return list(map(int, list(str(n))[::-1]))
def digit_reverse(n):
    a=[]
    for i in str(n):
        a.append(int(i))
    a.reverse()
    return a

 

 

 

 

 

 

 

 

144. 문자열 내 p와 y의 개수 

  • 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
  • 예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
  • 제한사항 :
    • 문자열 s의 길이 : 50 이하의 자연수
    • 문자열 s는 알파벳으로만 이루어져 있습니다.
  • 내가 푼 풀이
def solution(n):
    p = n.lower().count('p')
    y = n.lower().count('y')

    return p == y

print(solution("pPoooyY"))
# 출력 : True

 

  •  다른 사람의 풀이
def numPY(s):
    # 함수를 완성하세요
    a = 0
    b = 0
    for i in s:
        if i == "p" or i== "P":
            a += 1
        elif i == "y" or i == "Y":
            b += 1
    if a == b:
        return True
    else:
        return False
    return True 

 

 

 

 

 

 

 

 

 

 

145. 정수 제곱근 판별 

  • 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
    n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
  • 제한사항 :  n은 1이상, 50000000000000 이하인 양의 정수입니다.
  • 내가 푼 풀이
def solution(n):
    x = int(n ** 0.5)

    return (x + 1) ** 2 if x ** 2 == n else -1

print(solution(121))
# 출력 : 144

 

  •  다른 사람의 풀이
def solution(n):
    return n == int(n**.5)**2 and int(n**.5+1)**2 or 'no'
def nextSqure(n):
    for x in range(1,n) :
        if x ** 2 == n :
            return (x+1) ** 2
    return "no"
import math
def solution(n):

    return -1 if int(math.sqrt(n)) != math.sqrt(n) else (math.sqrt(n)+1) ** 2

 

 

 

 

 

 

 

 

 

146. 정수 내림차순으로 배치하기 

  • 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
  • 제한사항 :  n은 1이상,  8000000000 이하인 자연수입니다.
  • 내가 푼 풀이
def solution(n):
    return int(''.join(sorted(str(n), reverse=True)))

print(solution(118372))
# 출력 : 873211
  • reverse는 영어로 "반대로"라는 뜻입니다. 파이썬의 sorted() 함수에서 reverse=True를 사용하면 정렬된 결과를 반대로(내림차순으로) 반환하도록 지정하는 매개변수입니다.

 

 

 

 

 

 

 

147. 세로 읽기 

  • 문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • my_string은 영소문자로 이루어져 있습니다.
    • 1 ≤ m  my_string의 길이 ≤ 1,000
    • m은 my_string 길이의 약수로만 주어집니다.
    • 1 ≤ c  m
  • 내가 푼 풀이
def solution(my_string, m, c):
    # 문자열에서 c번째 열에 해당하는 문자들을 추출하여 반환
    return my_string[c-1::m]

print(solution("ihrhbakrfpndopljhygc",4,2))
# 출력 : happy

 

 

  •  다른 사람의 풀이
def solution(my_string, m, c):
    answer = ''
    for i in range(c-1,len(my_string),m): answer+=my_string[i]
    return answer
def solution(my_string, m, c):
    return ''.join(my_string[i] for i in range(c - 1, len(my_string), m))
def solution(my_string, m, c):
    answer = ''

    for i in range(0, len(my_string)):
        if i%m==0:
            answer += my_string[i+c-1]

    return answer

 

 

 

 

 

 

 

 

 

148. 하샤드 수 

  • 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
  • 제한사항 : 
    • x는 1 이상, 10000 이하인 정수입니다.
  • 내가 푼 풀이
def solution(x):
    return x % sum(int(i) for i in str(x)) == 0

print(solution(11))
# 출력 : happy

 

 

  • 다른 사람의 풀이 
def solution(x):
    answer = True
    xs = str(x)
    s = 0
    
    for i in range(len(xs)):
        s += int(xs[i])
    if x % s == 0:
        answer = True
    else:
        answer = False

    return answer

 

 

 

 

 

 

 

 

 

149. 합성수 찾기 

  • 약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :   1  n ≤ 100
  • 내가 푼 풀이
def solution(n):
    X = 0
    for num in range(4, n + 1):  # 소수제거, 4부터 시작
        Y = 0
        for i in range(1, num + 1):
            if num % i == 0:
                Y += 1
        if Y >= 3:
            X += 1
    return X

print(solution(15))
# 출력 : 8

 

 

  •  다른 사람의 풀이
def solution(n):
    output = 0
    for i in range(4, n + 1):
        for j in range(2, int(i ** 0.5) + 1):
            if i % j == 0:
                output += 1
                break
    return output
def get_divisors(n):
    return list(filter(lambda v: n % v ==0, range(1, n+1)))

def solution(n):
    return len(list(filter(lambda v: len(get_divisors(v)) >= 3, range(1, n+1))))
def solution(n):
    answer = 0
    for i in range(1, n + 1):
        if isprime(i) == False:
            answer += 1
    return answer

def isprime(num):
    count = 0
    for d in range(1, num + 1):
        if num % d == 0:
            count += 1
            if count > 2:
                return False
    return True

 

 

 

 

 

 

 

 

 

 

150. 등차수열의 특정한 항만 더하기 

  • 두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :  
    • 1 ≤ a ≤ 100
    • 1 ≤ d ≤ 100
    • 1 ≤ included의 길이 ≤ 100
    • included에는 true가 적어도 하나 존재합니다.
    •  
  • 내가 푼 풀이
def solution(a, d, included):
    total = 0
    for i in range(len(included)):
        if included[i]:
            total += a + i * d
    return total

print(solution(3,4, [true, false, false, true, true]))
# 출력: 37

 

  •  다른 사람의 풀이 
def solution(a, d, included):
    return sum(a + i * d for i, f in enumerate(included) if f)

 

  • enumerate는 리스트를 인덱스와 값 쌍으로 꺼내주고 뒤에 if f 부분은 https://wikidocs.net/22805 여기 보시면 이해되실거에요
def solution(a, d, included):
    ai = a
    answer = 0 
    for i in included:
        if i == True:
            answer += ai 
        ai = ai + d    
    return answer

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형
TAG
more
최근에 올라온 글