728x90

문제 설명

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

제한 조건

  • x는 -10000000 이상, 10000000 이하인 정수입니다.
  • n은 1000 이하인 자연수입니다.

입출력 예

xnanswer
2 5 [2,4,6,8,10]
4 3 [4,8,12]
-4 2 [-4, -8]

<풀이>

def solution(x, n):
    return  [x*i for i in range(1, n+1)]

 

728x90
728x90

문제 설명

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

def solution(s):
    cnt1=0
    cnt2=0

    for c in s:
        if c == "p" or c == "P":
            cnt1 = cnt1 + 1

        if c == "y" or c == "Y":
            cnt2 = cnt2 + 1  

    if cnt1 == cnt2:
        return True
    else:
        return False

위의 나의 코드를 보면 정석..? 그냥 문제를 하나하나 해석해서 풀었다.. 시간도 오래걸리고 코드도 길다..

def solution(s):
    
    return s.lower().count('p') == s.lower().count('y')

사실 문자열 메서드에 포함된 글자의 개수를 알려주는 문자열의 메서드 count()가 있습니다. 위의 코드 처럼 count() 함수를 사용해서 하는 것이 간단하다.!

728x90
728x90
def solution(n):    
    a=n**0.5
    if int(a)==a:
        return (a+1)**2
    else:
        return -1
def solution(n):    

    sqrt = n ** (1/2)

    if sqrt % 1 == 0:
        return (sqrt + 1) ** 2
    return -1

먼저 문제의 알고리즘을 적어 보면

  1. 주어진수가 정수의 제곱인지 확인
  2. 만약 정수의 제곱이면 정수(제곱근)에 1을 더한 수를 제곱한수를 리턴 
  3. 정수의 제곱이 아니면 -1 을 리턴 

그러면 우리는 먼저 제곱근 구하는 함수, 자료형 확인하는 함수, 자료형이 맞는지 확인해주는 함수 등을 생각한다. 그 함수들은 각각 math.sqrt(), type(), isinstance() 이고,

하지만 이 함수들을 단순히 사용하는 것으로는 답을 구하는 것이 쉽지 않을 것이다.

 

방법은 어떤 값이 정수인지 확인하는 방법은 원래 값과 정수로 바꾼 값이 같은지 확인하는 것이다.

즉, 3.0과 int(3.0)의 값이 같으면 그 값은 정수 값인 것.

이제 math.sqrt() 함수를 이용하여 문제를 해결할 수 있다.

 

import math

def solution(n):    
    a=math.sqrt(n)
    if int(a)==a:
        return (a+1)**2
    else:
        return -1
728x90
728x90
def solution(n):
    answer=[]
    while(n>0):
        answer.append(n%10)
        n//=10
    return answer
def solution(n):
    answer=list(str(n))
    answer.reverse()
    return list(map(int,answer))

리스트에 map을 사용해보겠습니다. map은 리스트의 요소를 지정된 함수로 처리해주는 함수입니다(map은 원본 리스트를 변경하지 않고 새 리스트를 생성합니다).

  • list(map(함수, 리스트))
  • tuple(map(함수, 튜플))

 

 

순서를 뒤집는 방법에는 어떤 방법이 있을까?

먼저 가장 간단한 방법은 값을 뒤쪽에서 빼서 새로운 곳에 넣는 것입니다.

n     : 1 2 3 4 5   

결과 : 

 

n     : 1 2 3 4  

결과 : 5 

 

n     : 1 2 3  

결과 : 5 4

 

n     : 1 2  

결과 : 5 4 3

 

n     : 1 

결과 : 5 4 3 2

 

n     : 

결과 : 5 4 3 2 1

 

 

또 다른 방법은 맨뒤와 맨 앞의 값을 서로 바꾸는 방법입니다.

 

n : 1 2 3 4 5   (1과 5를 바꿉니다.)

n : 5 2 3 4 1    (2와 4를 바꿉니다.)

n : 5 4 3 2 1

728x90
728x90

<나의 풀이>

def solution(N):
    answer = 0
    
    for n in str(N):
	    answer += int(n)
    return answer

문자열로 형 변환해서 푸는 방법

1. 입력된 N(정수형)을 문자로 형 변환한다.

2. 형 변환된 문자열의 길이만큼 반복하면서 각 자리 값을 갖고 온다.

3. 갖고 온 자리값을 숫자로 변환해 변수에 합한다.

 

알고리즘이 정해 졌으니 이제 코드로 표현해 보겠습니다.

먼저 숫자를 문자로 형 변환하는 함수는 str()입니다.

(참고로 int(), list(), tuple()과 같이 각 자료형 이름으로 만들어진 함수가 형 변환 함수입니다. )

 

<다른 풀이>

형 변환을 사용하지 않는 방법

앞에서 이야기한 것처럼 다른 언어에서는 형 변환이 조금 불편할 수도 있습니다.

그래서 이번에는 형 변환을 사용하지 않는 방법을 소개하겠습니다.

 

이 방법의 핵심은 바로 나누기와 나머지입니다.

먼저 정수 몫과 나머지를 구하는 연산자인 // 와 % 가 필요합니다. (코딩에서는 나머지 구하는 일이 은근히 많으니 % 연산자는 잘 기억해 두세요)

 

def solution(N):
    answer = 0

    while(N>0):
        answer+=(N%10)
        N=N//10

    return answer
  1. 123을 10으로 나눈 나머지를 구합니다.                 >> 3  (변수에 더함)
  2. 123을 10으로 나눈 정수 몫을 구합니다.                 >> 12 
  3. 12( 2. 의 결과 )를 10으로 나눈 나머지를 구합니다.  >> 2 ( 변수에 더함)
  4. 12를 10으로 나눈 정수 몫을 구합니다.                   >> 1 
  5. 1( 4. 의 결과 )을 10으로 나눈 나머지를 구합니다.    >> 1 ( 변수에 더함)
728x90
728x90
SELECT ANIMAL_TYPE, IFNULL(NAME, "No name") AS NAME, SEX_UPON_INTAKE 
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
728x90
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/120923

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

<나의 답>

def solution(num, total):
    average = total // num
    return [i for i in range(average - (num-1)//2, average + (num + 2)//2)]
  • 연속된 수이기 때문에 평균을 기준으로 좌측, 우측 끝 값만 구하면 된다
  • 좌, 우측 숫자의 개수는 num이 짝수이냐 홀수이냐에 따라 다르기 때문에 왼쪽 끝 값을 구하기 위해서는 num - 1로 하고 우측은 num + 2를 하면 짝수, 홀수를 구분하지 않고 연속적인 리스트를 구할 수 있다

 

<다른 사람 풀이>

def solution(num, total):
    return [(total - (num * (num - 1) // 2)) // num + i for i in range(num)]

이거 진짜 간단하게 풀었음...

728x90

+ Recent posts