itisjustK
코딩과 사람 사는 이야기
itisjustK
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • 일이삼사오육칠팔구십일이삼사오육칠팔구십일이삼사오육칠.. (0)
    • Web (43)
      • html & css (9)
      • django & python (15)
      • java script (9)
    • iOS (51)
      • Swift (42)
      • SwiftUI (5)
    • CS (25)
      • 자료구조 (6)
      • 운영체제 (3)
      • 데이터베이스 (9)
      • 네트워크 (7)
    • PS (34)
      • 알고리즘 & 자료구조 (0)
    • Life (36)
    • Retrospective (15)
    • Book (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • AppleDevloperAcademy
  • mongodb
  • CoreData
  • 생활코딩 #이고잉 #HTML #코딩 #개발자
  • binding
  • nosql
  • 점주
  • crud
  • SwiftUI
  • ios
  • 독립서점
  • 생활코딩
  • SWIFT
  • POSTECH
  • 어플
  • CS
  • 연결리스트
  • 세그멘테이션
  • 개발자
  • 킨디

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
itisjustK

코딩과 사람 사는 이야기

PS

2주차 [ 프로그래머스 - 자릿수 더하기 , 정수 제곱근 판별 ] - for문, list sum, math.sqrt, pow(x,y)

2021. 7. 6. 21:17

자릿수 더하기

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를 들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
*제한사항
N의 범위 : 100,000,000 이하의 자연수

 

<내 풀이>

def solution(N):
    answer=0
    for i in str(N):
        i=int(i)
        answer+=i
    return answer
#자릿수를 구하기 위해 문자열로 바꿔주었고, 각 문자열을 다시 정수로 바꿔서 합을 answer에 담았다.

자릿수를 다루는 문제는 1주차 문제인 하샤드 수에서도 나왔다. 그때는 하나씩 계산을 통해 귀찮게 구했는데 그것보다 더 좋은 방법이 있다. 숫자를 string화 한 후, 이 string의 인덱싱(문자의 순서를 다루는 것)을 통해 각 자릿수를 언급하고 다루는 방법이 있다.

for문을 통해 string으로 변환한 자연수 N의 각 요소를 다시 정수화하여 answer에 더해준다. (answer를 초기에 0이라고 지정해주었다.)

 

<다른 사람 풀이>

def solution(N):
	return sum([int(i) for i in str(N)])

여기서 쓰인 개념은 ①for문 ②sum 이다.

 

①for문

for문의 문법

for 변수 in 문자열,튜플,리스트,범위 등등

자연수 N을 str을 통해 문자열로 변환하였기 때문에 for문에 쓸 수 있는 것이고, i는 str의 글자 하나씩 순회하면서 지정한다.

for 앞에 있는 int(i)의 의미는 i를 int 정수형으로 저장한다는 의미이다.

그리고 이 for문을 대괄호로 둘러싸고 있는데 이는 for문을 통해 str(N)에 있는 각 자리 글자들을 리스트 형태로 저장한다는 뜻이다.

 

②list sum

sum은 합계를 의미하는 함수이다. sum() 함수 안에 리스트가 들어가면 리스트의 각 요소를 다 더한다는 의미가 된다.

즉, 리스트의 각각의 정수들의 합을 구한다는 의미이다.

 

정수 제곱근 판별

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

 

<내 풀이>

import math
def solution(n):
    x=int(math.sqrt(n))
    if pow(x,2) == n:
        answer=pow(x+1,2)
    else:
        answer=-1
    return answer

제곱근을 구하기 앞서 제곱근을 구하는 방식을 구글링하여 찾았다. import math와 math.sqrt(n)를 구해 제곱근을 구할 수 있다. (n에 루트를 씌운다는 의미)

n에 루트를 씌우고 이를 int를 통해 정수로 처리한다. 만약 x가 원래 정수였다면 Int한 값이 똑같을 테고 정수가 아니었다면 소수점 아래의 숫자들은 다 떨어져나가고 정수의 값만 남아있을 것이다. int처리한 x를 다시 제곱하였을 때 값이 똑같다면 x가 정수였다는 의미이므로 문제에서 요구한 대로 계산하여 출력해준다.

 

①math.sqrt(n)

n에 루트를 씌운다는 의미이다. 이를 쓰기 위해서는 math의 연산과정을 가져와야 하므로 import math 코드를 입력해주어야 한다.

 

②pow(x,y)

이는 x^y의 의미이다.

 

<다른 사람 풀이>

def solution(n):
	x=n**(1/2)
    if x%1==0:
    	return (x+1)**2
  	return 'no'

(문제가 약간 수정돼서 풀이가 살짝 다를 수도 있음)

다른 사람들은 제곱근이 지수에 1/2를 곱해준다는 것에 착안하여 풀이를 적었다.

그리고 정수라는 것은 1로 나누었을 때 나머지가 0이라는 것에 착안하여 풀었다.

'PS' 카테고리의 다른 글

5주차 [프로그래머스 - 숫자 문자열과 영단어] dictionary  (0) 2021.07.23
5주차 [프로그래머스-폰켓몬] set 함수  (0) 2021.07.23
5주차 [프로그래머스 - 약수의 개수와 덧셈]  (0) 2021.07.22
4주차 [ 백준 - 셀프 넘버, 한수 ] - not in list  (0) 2021.07.13
2주차 [ 프로그래머스 - 약수의 합, 직사각형 별 찍기, 이상한 문자 만들기 ] - range, for문+if문, map, \n  (0) 2021.07.07
    'PS' 카테고리의 다른 글
    • 5주차 [프로그래머스-폰켓몬] set 함수
    • 5주차 [프로그래머스 - 약수의 개수와 덧셈]
    • 4주차 [ 백준 - 셀프 넘버, 한수 ] - not in list
    • 2주차 [ 프로그래머스 - 약수의 합, 직사각형 별 찍기, 이상한 문자 만들기 ] - range, for문+if문, map, \n
    itisjustK
    itisjustK

    티스토리툴바