프로그래머스 - 문제 풀이

박경현·2023년 1월 10일
0

코딩 테스트를 살면서 가장 열심히 준비중이다..ㅋㅋ

사실 네이버 AI 부트캠프 준비도 있지만
그 다음날 바로 원티드 코딩테스트도 재미로 한번 보고 싶어 신청해서
더 열심히 해보는 중이다!!

언제나 내게 기회가 되는것이 있으면 도전하고 또 도전하자!

괄호변환

괄호변환 문제 링크

풀면서 느낀점은 전형적인 재귀 문제를 구현하는 것이다!

프로그래머스에 레벨 2에 있는 카카오 문제들은 대부분 구현 문제인거같다!
이 문제의 경우 3가지로 나누어서 풀었는데

  1. 올바른 괄호 문자열인지 확인하는 함수
  2. U,V로 문자열을 나눠주는 함수
  3. 재귀할 함수

문제를 읽고 이 세개를 정의했다면 풀었을거같다! -> 1번과 2번은 정의 했지만 3을 못했다ㅜ

재귀문제가 나오면 더럭 겁을 먹는데 그러지말고 그냥 함수안에서 내 자신 함수를 한번 더 호출한다 생각하자!

def check(p):
    stack = []
    for i in p:
        if i == '(':
            stack.append(i)
        else:
            if not len(stack):
                return False
            elif stack[-1] == '(':
                stack.pop()
    return False if len(stack) else True
def setUV(p):
    left,right = 0,0
    u,v= "",""
    for i in range(len(p)):
        if p[i] =="(":
            left +=1
        if p[i] ==")":
            right +=1
        if left == right:
            u = p[:i+1]
            v = p[i+1:] if i+1 < len(p) else ""
            break
    return u,v
def rec(p):
    if not len(p):
        return ""
    result = ""
    u,v = setUV(p)
    if check(u):
        result = u + rec(v)
    else:
        temp = '('
        temp += rec(v)
        temp += ')'
        u = u[1:-1]
        for i in u:
            if i == '(':
                temp += ')'
            else:
                temp += '('
        result += temp
    return result
def solution(p):
    answer = ''
    # () 개수가같음
    # 함수가 3개 필요 - 재귀, 올바른 괄호인지확인, uv나누는거
    if p == "":
        return ""
    if check(p):
        return p
    else:
        answer = rec(p)
        
    return answer

N진수 게임

이 문제는 처음에 이해를 못했었다,, 블로그를 무려 4개를 보고 그 다음 이해했다!!
N진수 게임 문제 링크
인수 n,t,m,p가 나오는데 m이 전체 인원인데 내가 세어야할 숫자가 t였다
근데 t가 m보다 커서 어떻게 풀지,, 당황했던 문제였다!

N진수 게임 푸는법

  1. N진수를 푸는 함수를 만든다
def jinsu(num,base):
	l = '0123456789ABCDEF'
    q,r = divmod(num,base)
    if q == 0:
    	return l[r]
    else:
    	return jinsu(q,base) + l[r]
  1. 함수로 만든 N진수 짜리 문자열에서 t개만큼 m번 띄면서 answer에 적자!

전체 코드

def jinsu(num, base):
    l = '0123456789ABCDEF'
    q,r = divmod(num,base)
    if q == 0:
        return l[r]
    else:
        return jinsu(q,base) + l[r]
def solution(n, t, m, p):
    answer = ''
    l =""
    for i in range(m*t):
        l+= jinsu(i,n)
    #print(l)
    
    j = p-1
    while len(l) >j and t >0:
        answer += l[j]
        j +=m
        t -=1
    return answer
profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글