def solution(dartResult):
n = ''
point = []
for i in dartResult:
if i.isdigit(): # 숫자면 n에 담기
n += i
if i == 'S': # S면 1제곱
n = int(n) **1
point.append(n)
n = ''
elif i == 'D': # D면 2제곱
n = int(n) **2
point.append(n)
n = ''
elif i == 'T': # T면 3제곱
n = int(n) **3
point.append(n)
n = ''
elif i == '*': # *(스타상)일때
if len(point)>1:
point[-2] *=2
point[-1] *=2
else: # 첫 번째 기회일 때
point[-1] *=2
elif i == '#': # #(아차상)일때
point[-1] *=(-1)
return sum(point)
풀이 1
dartResult 배열을 돌면서 숫자는 따로 관리해주고,
점수 또한 직전의 점수를 활용해야 할 부분이 있어서 배열로 관리해줬다.
S, D, T 가 나오면 각각 조건에 맞게 1, 2, 3씩 제곱해준다.
스타 상일 때는 point 배열이 1개일 때,
즉, 이번에 추가된 점수가 첫 번째 기회일 때만 현재 추가한 점수에 *2를 해주고
point 배열이 2이상부터는 추가된 점수와 직전의 점수에 각각 2를 곱해서 더해준다.
import re
def solution(dartResult):
bonus = {'S' : 1, 'D' : 2, 'T' : 3}
option = {'' : 1, '*' : 2, '#' : -1}
p = re.compile('(\d+)([SDT])([*#]?)')
dart = p.findall(dartResult)
for i in range(len(dart)):
if dart[i][2] == '*' and i > 0:
dart[i-1] *= 2
dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]
answer = sum(dart)
return answer
import math
def solution(n):
answer = 0
arr = [False,False] + [True]*n
for i in range(2, int(math.sqrt(n))+1):
if arr[i]:
j = 2
while i*j<=n:
arr[i*j] = False
j+=1
for i in range(2, n+1):
if arr[i]:
answer+= 1
return answer
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)
def solution(n, arr1, arr2):
answer = []
tmp1 = []
tmp2 = []
# arr1 수를 이진수로 바꾸기
for i in range(len(arr1)):
tmp = ''
while True:
if arr1[i]==0:
while len(tmp)!=n:
tmp+='0'
tmp1.append(tmp[::-1])
break
tmp += str(arr1[i]%2)
arr1[i]//=2
# arr2 수를 이진수로 바꾸기
for i in range(len(arr2)):
tmp = ''
while True:
if arr2[i]==0:
while len(tmp)!=n:
tmp+='0'
tmp2.append(tmp[::-1])
break
tmp += str(arr2[i]%2)
arr2[i]//=2
for i in range(n):
tmp = ''
for j in range(n):
if tmp1[i][j] == '1' or tmp2[i][j] == '1':
tmp += '#'
else:
tmp += ' '
answer.append(tmp)
return answer
풀이 1
10진수를 2진수로 만드는 방법을 10진수를 계속 2로 나눠줘서 나머지를 구하는 방식으로 했다.
거의 빡구현이다.
계속 반복문이 반복되는 부분을 느꼈지만, 일단 풀어봤다.
다른 사람들의 풀이를 보고 너무 짧아서 놀랐다.
def solution(n, arr1, arr2):
answer = []
for i,j in zip(arr1,arr2):
arr = str(bin(i|j))[2:] # 둘 중에 하나라도 있으면 (비트 연산..)
arr = arr.rjust(n,'0') # 0으로 채워주기
arr = arr.replace('1','#')
arr = arr.replace('0',' ')
answer.append(arr)
return answer
풀이 2
python 내장 함수를 사용하는 풀이다.
arr = str(bin(i|j))[2:] # 둘 중에 하나라도 있으면 (비트 연산..)
arr = arr.rjust(n,'0') # 0으로 채워주기
def solution(s):
answer = ''
i = 0 #각 단어 인덱스
for ch in s:
if ch == ' ': # 빈칸 체크
answer += ch
i = 0 # 빈칸이면 계속 단어 인덱스 0
else: # 빈칸 아니면
if i%2 == 0:
answer += ch.upper()
else:
answer += ch.lower()
i+= 1
return answer
def solution(s):
answer = ''
for word in s.split(" "):
n = ''
for i in range(len(word)):
if i%2 == 0:
n += word[i].upper()
else:
n += word[i].lower()
answer += (n+" ")
return answer[:-1]
풀이
두 방법으로 풀었는데 비슷하다.
이 문제에서 주의할 점은 단어 사이의 공백이 하나만 있다는 것이 아니라는 점이다.
하나 이상의 공백을 갖고 있다.
그래서 모든 공백을 없애주고 하나의 공백으로만 문자열을 이어 붙이며 새로운 단어일 때 인덱스가 다시 0부터 시작하며 따져줘야 한다.