TIL/내일배움캠프

코테로 파이썬 공부하기 Ⅴ

Kou_ 2026. 5. 27. 14:11

26-05-26

코테로 배워보는 파이썬 : 코드카타 14~20번

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

코테 문제 풀어보고 응용 문제 생각나는거 직접 풀어보기!

  • 약수의 합
    정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
    • 컴퓨팅 사고
      • 1부터 n까지의 수로 n을 나눴을 때 나머지가 0인 숫자는 약수
      • 빈 리스트에 append로 추가해서 sum으로 더하기
    • my_answer (⭕)
      def solution(n):
          return sum([i for i in range(1,n+1) if n%i==0])
  • 나머지가 1이 되는 수 찾기
    자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.
    • 컴퓨팅 사고
      • n%x==1 조건 만족하는 x
      • n이 3 이상 → x는 range(2,n+1)
    • my_answer (⭕)
      def solution(n):
          return min([x for x in range(2,n+1) if n%x==1])   
      • 정답이긴 하지만 리스트 전체를 뽑아서 최소값을 찾기 때문에 비효율 적이라고 생각
        → range로 x를 하나씩 넣으면 어차피 낮은 값부터 나오니까 처음 조건을 만족했을 때 멈추면?
      • 이럴 땐 리스트 컴프리헨션(리스트를 작성하는 간단한 문법)은 비효율 적
        → 기본 if 문, for 문으로 작성
    • 수정
      def solution(n):
          for x in range(2,n+1):
              if n%x==1:
                  return x    #조건 만족 후 바로 종료하기 위해 if 문 안에 return 작성
  • x만큼 간격이 있는 n개의 숫자
    함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
    • 컴퓨팅 사고
      • 1부터 n까지 범위를 정한 뒤 x를 각 수에 곱하면 n개의 수열
    • my_answer (⭕)
      def solution(x, n):
          return [i*x for i in range(1,n+1)]
  • 자연수 뒤집어 배열로 만들기
    자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
    • 컴퓨팅 사고
      • n을 map으로 각각 나눈 뒤 reverse
    • my_answer (⭕)
      def solution(n):
          answer = list(map(int,str(n)))
          answer.reverse()
          return answer
      • list.reverse() : list를 역순으로 정렬
      • list.sort(reverse=True) : 수의 크기로 내림차순 정렬
    • 다른 사람 풀이
      def solution(n):
          return [int(i) for i in str(n)][::-1]    
      • n을 문자열로 변환 후 for 문으로 각각 정수로 변환한 뒤 list로 저장해서 [::-1]로 역순 배열
  • 문자열을 정수로 바꾸기
    문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
    ex) "1234"면 1234, "-1234"면 -1234 반환
    • my_answer (⭕)
      def solution(s):
          return int(s)
  • 정수 제곱근 판별
    임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
    n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
    • 컴퓨팅 사고
      • if 문 사용해서 n==x**2이 성립하면 (x+1)**2을 리턴, 아니면 -1 리턴
        x 입력값이 없기 때문에 n의 제곱근 (n**0.5)를 기준으로 생각
    • my_answer (❌)
      def solution(n):
          root = n**0.5
          if root.is_integer():
              return (root+1)**2
          else:
              return -1
      • 최초 접근법이 틀렸고 이후에는 root가 정수인지 아닌지 판별하는 법을 몰랐다.
      • type(root)==int를 사용할 때, n==25라면 root==5.0이다. 즉, float 형태가 되어 else가 실행된다.
        때문에 .is_integer()가 필요!!
      • 알아두면 좋은 판단 메소드 → 결과가 모두 True of False로 출력
        • str 계열
          • .isdigit() : 문자열이 숫자로만 이루어져 있는가
          • .isalpha() : 문자열이 알파벳으로만 이루어져 있는가
          • .islower() : 문자열이 전부 소문자인가
          • .isupper() : 문자열이 전부 대문자인가
          • .isspace() : 문자열에 공백이 포함되는가
        • float 계열
          • .is_integer() : 정수 형태인가
        • 객체 타입 확인
          • isinstance(객체, type) : 객체의 타입이 맞는가
    • 다른 사람 풀이
      def nextSqure(n):
          sqrt = n ** (1/2)
          if sqrt % 1 == 0:    #1로 나눴을 때 나머지가 없다면 정수!!!
              return (sqrt + 1) ** 2
          return -1
  • 정수 내림차순으로 배치하기
    함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
    • 컴퓨팅 사고
      • n을 map으로 분리한 뒤 sort(reverse=True) 사용
    • my_answer (🤖)
      def solution(n):
          a = list(map(str,str(n)))
          a.sort(reverse=True)
          answer = ''.join(a)
          return int(answer)
      • join 문법 : '각 원소 사이에 넣고 싶은 것'.join(문자열 리스트)
        ex) jo = '-'.join(num)    #num = ['1','2','3','4','5'] 라면 1-2-3-4-5
    • 다른 사람 풀이
      def solution(n):
          ls = list(str(n))    #str로 문자열 변환하면 글자 하나씩 분리 가능
          ls.sort(reverse = True)    #숫자 문자열은 크기 비교 가능해서 sort 사용 가능
          return int("".join(ls))    #join 써서 하나의 문자열로 묶은 뒤 int로 정수형 변환