[다트게임]-[2018 KAKAO BLIND RECRUITMENT]
My answer
def solution(dartResult):
answer,flag = 0, 0
tmp, tmp2=[], [0]*12
score=0
# 여기부터 우선 다트결과를 각 회차별로 끊어놓은 거임
# 1번 방법
for i in range(len(dartResult)):
# 옵션이 있을수도 없을수도 있기때문에 있을때만 앞의 tmp에 추가
if(dartResult[i]=='*' or dartResult[i]=='#'):
tmp[-1]=tmp[-1]+dartResult[i]
flag+=1
# 문자일때 끊기ㅂㅁ
elif(dartResult[i].isdigit()==False):
tmp.append(dartResult[flag:i+1])
flag=i+1
print(tmp)
flag=0
'''
for i in range(len(dartResult)-1):
# 마지막일 경우에는 다음에 숫자가 안나오기 때문에 추가 조건
if(i==len(dartResult)-2):
tmp.append(dartResult[flag:])
break
# 다음이 숫자면 끊기
if(dartResult[i+1].isdigit()==True):
tmp.append(dartResult[flag:i+1])
flag=i+1
'''
for i in range(3):
length=len(tmp[i])
for j in range(length):
if(tmp[i][j].isdigit()==False):
flag=j
break
#보너스로 점수계산하기
if(tmp[i][flag]=='S'):
score=int(tmp[i][:flag])
elif(tmp[i][flag]=='D'):
score=int(tmp[i][:flag])**2
else:
score=int(tmp[i][:flag])**3
if(length==flag+2):
if(tmp[i][flag+1]=='*'):
if(i==0):
score*=2
else:
tmp2[i-1]*=2
score*=2
else:
score*=-1
tmp2[i]=score
score=0
flag=0
return sum(tmp2)
Another answer
def solution(dartResult):
point = []
answer = []
# 10이면 1,0이 따로 문자열에 들어가므로 k로 변경해둔다.
dartResult = dartResult.replace('10','k')
# k면 10을 문자로 넣어버린다
point = ['10' if i == 'k' else i for i in dartResult]
print(point)
i = -1
sdt = ['S', 'D', 'T']
for j in point:
if j in sdt :
answer[i] = answer[i] ** (sdt.index(j)+1)
elif j == '*':
answer[i] = answer[i] * 2
if i != 0 :
answer[i - 1] = answer[i - 1] * 2
elif j == '#':
answer[i] = answer[i] * (-1)
else:
answer.append(int(j))
i += 1
return sum(answer)
[가운데 글자 가져오기]
My answer
def solution(s):
answer = ''
if(len(s)%2==1):
return s[len(s)//2]
else:
return s[len(s)//2-1:len(s)//2+1]
Another answer
def solution(s):
return str[(len(s)-1)//2:len(s)//2+1]
[비밀지도]-[2018 KAKAO BLIND RECRUITMENT]
My answer
def solution(n, arr1, arr2):
answer = ''
answer2=[]
cnt=0
tmp, tmp2=[0]*n,[0]*n
for i in range(n):
while(1):
tmp[cnt]=arr1[i]%2
tmp2[cnt]=arr2[i]%2
arr1[i]=arr1[i]//2
arr2[i]=arr2[i]//2
cnt+=1
if(cnt==n):
cnt=0
break
tmp.reverse()
tmp2.reverse()
for j in range(n):
if(tmp[j]==0 and tmp2[j]==0):
answer+=' '
if(tmp[j]==1 or tmp2[j]==1 ):
answer+='#'
print(answer)
answer2.append(answer)
answer=''
tmp, tmp2=[0]*n,[0]*n
return answer2
Another answer
def solution(n, arr1, arr2):
sol=[] for a1,a2 in zip(arr1,arr2):
# 2진수로 바꾸고 앞에 문자2개를 없애준다. + 이진수의 덧셈을 해준다.
c = str(bin(a1 | a2)[2:])
# 0을 자릿수에 맞게 채워준다
c = "".join(['0' for i in range(n-len(c))]) + c
# replace를 한번에 여러개 쓸 수 있다.
sol.append(c.replace('0',' ').replace('1','#'))
return sol
---------------------------------------------------------
def solution(n, arr1, arr2):
answer = []
for i,j in zip(arr1,arr2):
a12 = str(bin(i|j)[2:])
# 위의 코드와 다른점은 0자릿수를 채워주는것을 함수를 이용한다는 것이다.
a12=a12.rjust(n,'0')
a12=a12.replace('1','#')
a12=a12.replace('0',' ')
answer.append(a12)
return answer
더보기
파이썬은 bin(),oct(),hex()라는 함수를 제공한다. 이 함수들은 10진수를 각각 2진수,8진수,16진수 형태의 문자열로 바꿔준다.
rjust()는 오른쪽으로 정렬하도록 해주는 함수이고 ()에는 공백을 채워줄 문자를 넣으면 된다.
728x90
반응형
'코딩테스트 > 프로그래머스[Python]' 카테고리의 다른 글
[프로그래머스] 09/15 (6) (0) | 2021.09.15 |
---|---|
[프로그래머스] 09/14 (3) (0) | 2021.09.14 |
[프로그래머스] 09/09 (3) (0) | 2021.09.09 |
[프로그래머스] 09/08 (6) (0) | 2021.09.08 |
[프로그래머스] 09/06 (2) (0) | 2021.09.06 |