[프로그래머스] 09/13 (3)

2021. 9. 13. 20:57·코딩테스트/프로그래머스[Python]

[다트게임]-[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
'코딩테스트/프로그래머스[Python]' 카테고리의 다른 글
  • [프로그래머스] 09/15 (6)
  • [프로그래머스] 09/14 (3)
  • [프로그래머스] 09/09 (3)
  • [프로그래머스] 09/08 (6)
창빵맨
창빵맨
  • 창빵맨
    Let's be Developers
    창빵맨
    로그인/로그아웃
  • 전체
    오늘
    어제
    • 분류 전체보기 (471)
      • 알쓸신잡 (79)
      • ML & DL (85)
        • Computer v.. (22)
        • NLP (22)
        • 파이썬 머신러닝 완.. (3)
        • 개념정리 (38)
      • 리눅스 (21)
      • 프로젝트 (29)
        • 산불 발생 예측 (6)
        • 음성비서 (12)
        • pdf 병합 프로그.. (0)
        • 수위 예측 (5)
        • 가짜 뉴스 분류 (5)
        • 전력사용량 예측 (1)
      • 코딩테스트 (217)
        • 프로그래머스[Pyt.. (17)
        • 프로그래머스[Fai.. (3)
        • 백준[Python] (160)
        • 이것이취업을위한코딩.. (18)
        • 파이썬 알고리즘 (19)
      • 데이터분석실습 (25)
        • 데이터 과학 기반의.. (18)
        • 헬로 데이터 과학 (7)
      • 메모장 (0)
      • 잡담 (4)
  • Personal

    GITHUB
    Instagram
  • 공지사항

  • 인기 글

  • 태그

    이코테
    나동빈
    BFS
    그리디
    이것이취업을위한코딩테스트다
    DFS
    dp
    백준
    파이썬
    이분탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3

HOME

HOME

상단으로

티스토리툴바