(TIS) 20210513

HEYDAY7·2021년 5월 13일
0

Today I Solved

목록 보기
3/9

Still Level 2

프로그래머스 "짝지어 제거하기"

stack을 이용하면 쉽게 해결 가능하다

프로그래머스 "프린터"

queue의 형식으로 풀면 어렵지 않게 풀린다
추가적으로 deque를 사용하면 성능을 약간 올릴 수 있다.

프로그래머스 '소수 찾기'

permutation을 이용해서 가능한 case를 구하고, 소수임을 판별해서 숫자를 셌다. 다른 분들의 풀이를 보니 '에라토스테네스의 체' 라는 소수 판별법이 있다는 것도 알게 됐다.

프로그래머스 '괄호 변환'

카카오 브라인드 문제였다. 일반적인 괄호 문제라기보다는 그냥 문제의 지시사항을 꼼꼼하게 읽는게 포인트였다!!, 또 '('와 ')'로만 이루어진 괄호문자열의 경우 두 괄호의 갯수가 같다는 가정이 있을 때 특수한 성질을 가진다는 걸 확인할 수 있다.!!!

프로그래머스 '주식 가격'

stack을 이용해서 풀 수 있다. 나는 enumerate꺼내면서 비교하는 방식으로 진행하였다.

프로그래머스 '조이스틱'

간단해 보였지만 좌우 이동의 최적화 부분에서 애를 먹었다.
1시간 반 박았는데 실패함...... 매우 우울.... 밤에 다시 해볼것

프로그래머스 '다음 큰 숫자'

음.. 결론 부터 말하자면 뭔가 찝찝하다.
문제
문제를 보자마자 생각나는 방식은 당연히 주어진 숫자보다 하나씩 키워가면서 이진수 변환 후 1의 갯수가 같아질 때 return하는 방식이다... 근데 나는 왠지? 당연하게도 코드가 무식해보여서 다른 방식으로 짰다(수학적인 느낌으로??). 내 코드는 이렇다.

def solution(n):
    b = format(n, 'b')
    c = b.count('1')
    
    if len(b) - c == 0:
        return n - 2**(len(b)-1) + 2 **(len(b))
    elif c == 1:
        return n * 2
    elif b.startswith('1'*c):
        return 2 ** (len(b)) + 2 ** (c-1)-1
    else:
        return 2 **(len(b)-1) + solution(int(b[1:], 2))

종료조건을 설정해두고, 이진수를 가지고 recursive하게 돌아가는 함수이다.
근데 왠걸 짜서 통과하고 보니, 아무생각없이 반복문을 한번 돌리는게 가장 성능이 좋았다...

def solution(n):
    for num in range(n+1, 1000001):
        if c == format(num, 'b').count('1'):
            return num

음 조금만 생각해보면 결국 항상 백만번 안에 끝나기 때문에, 당연히 꽤나 빠른 코드였는데, 너무 for문을 쓰는걸 꺼려해서 이런 삽질을 한 것 같다...
항상 코드에 손대기 전에 생각나는 아이디어가 있다면, 그 아이디어의 time complexity부터 고민해보는 습관을 들여보자!

프로그래머스 '카펫'

이건 그냥 수학문제다. 이차방정식이라고 생각해서 공식만들어도된다. 나는 그냥 for문 돌렸다.

프로그래머스 '가장 큰 수' 굳

어제 못 풀었던 문제에 재도전 했다. 이번에는 insertion sort를 이용해서 문제를 풀어보려 했다. 결과를 보니... 알고리즘은 맞는데 시간이 너무 오래걸리는 거 같았다. 틀린 테스트들은 모두 시간 초과였기에 그렇다.
후... 세번째 시도중인데 나를 힘들게 하고 있다... 풀면 많이 배워갈 것 같지만 내 멘탈을 위해 다시 다른문제를 도전한다.

프로그래머스 'H-Index' 굳

H-Index에 대한 배경지식이 많지 않아서 살짝 헤맸던 것 같다. 요지는 답이 될 수 있는 값은 주어진 citations수에 포함되지 않으며, 논문의 숫자를 기점으로 세야한다는 것이다.

  • 또 n보다 큰 원소의 갯수를 세야한다.~ 싶을땐 list를 정렬하고서 숫자를 세보자. index와 잘 조합해서 사용하면 꽤나 강력하다!!

프로그래머스 '숫자의 표현'

그다지 어렵지 않은 문제였다.

프로그래머스 '구명보트' 굳

아주 평이한 아이디어로 구현했더니... 효율성에서 시간초과에 걸렸다.
두번째로 구현한 방식은 투포인터다!, 이 방식을 사용하니 매우매우 간단하게 풀렸다... 좀 아직 프로그래밍적 사고에 완전히 익숙해지지 못한듯...
아주 큰 도움이 되었다!!!!

프로그래머스 '다리를 지나는 트럭'

그다지 어렵지 않게 풀었다. queue는 deque를 잘 활용하는게 포인트 인 것 같다.

profile
(전) Junior Android Developer (현) Backend 이직 준비생

0개의 댓글