소수 찾기
효율성이 떨어져서 통과받지 못한 내 코드
def solution(n):
count = 1
for i in range(2, n+1):
m = int(i**0.5)
for j in range(2, m+1):
if i%j == 0:
count += 1
break
answer = n - count
return answer
에레토스테네스의 체 이용한 코드
def solution(n):
sieve = [True] * (n+1)
m = int(n ** 0.5)
for i in range(2, m + 1):
if sieve[i] == True:
for j in range(i+i, n+1, i):
sieve[j] = False
return len([i for i in range(2, n+1) if sieve[i] == True])
다른 사람의 풀이
def solution(n):
num=set(range(2,n+1))
for i in range(2,n+1):
if i in num:
num-=set(range(2*i,n+1,i))
return len(num)
- set()은 집합 자료형으로 많은 자료를 한 번에 집어 넣을 수 있다. set()의 특징은 1.중복을 허용하지 않으며 2.순서가 없다. 즉 인덱스 값을 이용하기 위해서는 list나 tuple로 변환 후 사용해야한다.
- range(2*i,n+1,i)는 2*i를 시작으로 i만큼 커지면서 n까지의 범위에 해당하는 수를 말한다. 즉 2*i부터 i의 배수를 num에서 빼는 코드이다.
- all()은 iterable 자료형을 인수로 받아서 모든 요소의 값이 참이면 True를, 거짓이면 False를 반환한다. 즉 리스트, 튜플, 문자열, 딕셔너리, 집합 등의 자료형을 인수로 받는다.(다른 답변에서 사용)
수박수박수박수박수박수?
내 코드
def solution(n):
str = ""
for i in range(n):
if (i+1)%2 == 1:
str = str + "수"
else:
str = str + "박"
answer = str
return answer
다른 사람의 풀이
def solution(n):
s = "수박" * n
return s[:n]
- 슬라이싱 개념을 이해하면 역시나 편하다. 삶의 질이 달라질 듯ㅎㅎ
문자열을 정수로 바꾸기
내 코드
def solution(s):
k = int(s)
return k
다른 사람의 풀이
def solution(str):
result = 0
for idx, number in enumerate(str[::-1]):
if number == '-':
result *= -1
else:
result += int(number) * (10 ** idx)
return result
- enumerate()는 순서가 있는 자료형(리스트, 튜플, 문자열)을 인수로 받아 인덱스 값을 포함하는 enumerate 객체를 돌려준다.
- str[::-1]은 뒤에서부터 앞으로 가져오도록 한다.
- else부분은 각 자리 수에 맞추어 주는 코드이다.
(멋있어서 가져옴)
시저 암호
내 코드
def solution(s, n):
k = ""
for i in range(len(s)):
if s[i] == " ":
k += " "
else:
if ord(s[i]) >= 65 and ord(s[i]) <= 90:
if ord(s[i])+n >= 65 and ord(s[i])+n <= 90:
k += chr(ord(s[i])+n)
else:
k += chr(ord(s[i])+n-26)
elif ord(s[i]) >= 97 and ord(s[i]) <= 122:
if ord(s[i])+n >= 97 and ord(s[i])+n <= 122:
k += chr(ord(s[i])+n)
else:
k += chr(ord(s[i])+n-26)
answer = k
return answer
다른 사람의 풀이
def solution(s, n):
s = list(s)
for i in range(len(s)):
if s[i].isupper():
s[i]=chr((ord(s[i])-ord('A')+ n)%26+ord('A'))
elif s[i].islower():
s[i]=chr((ord(s[i])-ord('a')+ n)%26+ord('a'))
return "".join(s)
- isupper(), islower()을 통해 대소문자 여부를 boolean값으로 반환할 수 있다.
약수의 합
내 코드
def solution(n):
list = []
for i in range(n):
if n%(i+1) == 0:
list.append(i+1)
return sum(list)
다른 사람의 풀이
def solution(n):
return sum([i for i in range(1,n+1) if n%i==0])
- list comprehension을 쓰면 한 줄로 쓸 수 있다.
이상한 문자 만들기
내 코드
def solution(s):
list = []
answer = ""
for i in s:
list.append(i)
j = 0
for i in range(len(list)):
if list[i] == " ":
answer += list[i]
j = 0
elif j%2 == 0:
answer += list[i].upper()
j += 1
else:
answer += list[i].lower()
j += 1
return answer
다른 사람의 풀이
def solution(s):
return ' '.join([''.join([c.upper() if i % 2 == 0 else c.lower() for i, c in enumerate(w)]) for w in s.split(" ")])
def solution(s):
return " ".join(map(lambda x: "".join([a.lower() if i % 2 else a.upper() for i, a in enumerate(x)]), s.split(" ")))
- map(f, iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다. map은 입력받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려주는 함수이다.
자릿수 더하기
내 코드
def solution(n):
k = str(n)
sum = 0
for i in k:
sum += int(i)
return sum
다른 사람의 풀이
def solution(number):
return sum([int(i) for i in str(number)])
def sum_digit(number):
if number < 10:
return number;
return (number % 10) + sum_digit(number // 10)
- 두 번째 풀이는 재귀함수에 대한 내용으로 함수 내에서 현재 정의하는 함수를 호출하는 것이다.
자연수 뒤집어 배열로 만들기
내 코드
def solution(n):
k = str(n)
answer = []
for i in k:
answer.append(int(i))
answer.reverse()
return answer
다른 사람의 풀이
def digit_reverse(n):
return list(map(int, reversed(str(n))))
정수 내림차순으로 배치하기
내 코드
def solution(n):
k = str(n)
s = ""
list = []
for i in k:
list.append(i)
list.sort(reverse = True)
for i in list:
s += i
answer = int(s)
return answer
다른 사람의 풀이
def solution(n):
return int("".join(sorted(list(str(n)), reverse=True)))
정수 제곱근 판별
내 코드
def solution(n):
answer = 0
for i in range(n):
if (i+1)**2 == n:
answer = (i+2)**2
break
if answer == 0:
answer = -1
return answer
다른 사람의 풀이
def solution(n):
sqrt = n ** (1/2)
if sqrt % 1 == 0:
return (sqrt + 1) ** 2
return -1
def solution(n):
return int(n**0.5+1)**2 if n == int(n**0.5)**2 else -1
- 함수 내에서 return을 하면 함수는 해당 시점에서 종료한다.