본문 바로가기

DEV/알고리즘 문제 풀이27

알고리즘 다시 공부하기 1일차 1일차 알고리즘 설계 시에 고민해야 하는 거 알고리즘이 우리가 기대한 결과를 출력하는지 선택한 방법이 최선인지 규모가 더 큰 데이터 셋에도 동작할지 알고리즘의 분류 데이터 집약적 알고리즘 → ex) 대용량에 파일에 적용된 압축 알고리즘 연산 집약적 알고리즘 → ex) 매우 큰 소수를 찾는 알고리즘 1번 + 2번을 한 알고리즘 → 자원 소모 多, 가용한 자원 지능적 할당 필요! 데이터 → 크기 + 속도 + 다양성 (속도 기준 : 배치 → 주기적 → 준 실시간 → 실시간 프로세서 순) 연산 → 문제를 처리하는데 소요되는 자원에 관련 된것 → 하려는 일에 따라서 더 많은 처리 능력이 필요로 해짐 성능 분석하기 공간 복잡도 분석 → 알고리즘이 입력데이터를 처리하는데 필요한 메모리양 추정 알고리즘이 돌아가는 과정.. 2022. 9. 7.
[백준] 17298번 with Python (아직 못품) 더보기 문제 크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다. 예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ .. 2022. 4. 13.
[백준][파이썬] 1193번 분수찾기 브론즈 문제 치곤 상당히 많이 고민했던 문제입니다. 다들 어떤 식으로 고민해서 푸는지는 모르겠지만, (1/1)-(1/2,1/2)-(3/1,2/2,1/3)-... 이런식으로 계속해서 숫자가 이어져 나가고 있을 때 몇 번째의 값을 구하는지 문제에서 주면 답을 찾아 주어야 하는 문제입니다. 생각했던 과정은 1,2,3 계속해서 1씩 늘어나는 숫자를 생각했을 때 2,3,4 순으로 분자+분모 값의 합이 나온다. 그러면 등차수열 처럼 값을 늘려서 계산해주면 되겠네 하지만 중간에 분자+분모 값이 홀수 인지 짝수인지에 따라서 분수의 순서가 달라진다. 그러면 그거는 2로 나눠서 나머지를 확인하면 되겠네 몇 번째 인지는 어떻게 생각을 해줄껀가를 고민했을 때, 저의 경우에는 (1/1)이나 (1/2,2/1) 처럼 대각선으로 한.. 2022. 1. 15.
꾸준히 다시 공부하기 2021.12.26일자로 다시 빡세게 백준 문제를 풀기 시작했습니다. 한 20일 정도 지났는데 하루에 그래도 한문제씩은 푸는 속도로 하나씩 꾸준하게 풀어가보려고 합니다. (이제는 진짜 전역의해가 밝았기 때문에 ㅎㅎ) 일단은 크게 계획을 세워서 풀고 있어서 한번 적어보자면 1. 백준 단계별 풀어보기 1)입출력 단계~12)정렬 단계 까지 정리하면서 기본정도는 쳐야 될거 같아서 하나씩 풀어보고 있습니다. (이전에 풀어봤던 문제도 있고, 아니면 파이썬으로 혹은 다른언어로 풀어본 문제도 있어서 하나씩 차근차근 돌아본다는 느낌으로 풀어보고 있습니다.) 2. 백준 단계별 풀어보기 그다음은 백준 강의에 있는 알고리즘 기초/중급 정도 까지 문제를 풀어볼까 합니다. 확실히 머리는 쓰는 만큼 잘굴러가는 거 같아서 입대하기 .. 2022. 1. 15.
[백준] 1712번 손익분기점 with python 어떻게 접근을 했는가? 처음에는 막연히 생각했던게 그냥 봐도 손익분기점을 구하는 문제였고, 그냥 고정비용 빼주고, 나머지 가변비용을 생각해서 그걸 계산해주면 바로 풀리지 않을까 라고 생각을 했던 거 같습니다. 물론 문제를 풀면서도 그게 어느정도 맞긴 해서 거의 답에 근접 하기는 했었습니다. import sys input = sys.stdin.readline # 이걸로 일단 선언 해두기 b = input().split() un_v = int(b[0]) pl_v = int(b[1]) no_v = int(b[2]) temp = int(un_v / (no_v - pl_v)) temp2 = int(un_v % (no_v - pl_v)) if temp 0 and te.. 2021. 6. 27.
[백준] 4673번 with Python 주말에도 풀다가 문제에 대한 이해가 안되서 미뤄두었던 문제임. 일단 이해가 안된 이유는 문제의 시작을 어디서 부터 집어서 풀어야 될지가 감이 안잡혀서 더 그랬던 것 같음. 처음 문제를 보았을 때 예시를 보고 감이 안잡혀서 이것 저것 시도를 다해보다가 직접 적어보면서 다시 풀어봤더니 그냥 너무 어렵게 생각했던 것 같음. 항상 백준 문제를 풀 때 느끼는 거지만 너무 어렵게 생각해서 쉬운 문제를 못풀게 되는 경우가 많은 것 같음. 다시 쉽게 생각해서 그냥 1부터 다 더해보고 셀프 넘버가 아닌거를 1~10000까지 가지고 있는 리스트 상에서 다 빼버리면 되는 거 였음. import sys input = sys.stdin.readline # 이걸로 일단 선언 해두기 # selfnum을 구해주는 함수 구해서 리스트.. 2021. 6. 16.
[백준] 2884번 with Python 다시 봐야되는 문제 중에 하나인 것 같음. 일단 7번 틀리면서도 정확하게 왜 틀리는 지를 확인 못하면서 푸는 느낌이었던 것 같음. temp = input().split() x = int(temp[0]) y = int(temp[1]) if y == 45: print(x, y-45) else: if x == 0: print(24-abs(x-1), 60-abs(y-45)) else: print(abs(x-1), 60-abs(y-45)) 처음에 문제 풀 때는 조건 중에 45분 이라는 점에 대해서 너무 어그로가 끌려서 이 조건을 두고 if문을 써가려고 하는 경향이 있었는데, 막상 문제를 풀어보니까 45분이 중요한게 아니고, 시간이 오히려 더 중요 했던 느낌, 그리고 절대값 문항을 잘쓰면 쉽게 문제를 풀 수 있었던.. 2021. 6. 8.
[백준] 9498, 2753, 14681번 with Python num = int(input()) if num >= 90 and num = 80 and num = 70 and num = 60 and num 0 and y > 0: print(1) elif x > 0 and y < 0: print(4) else: print(2) 2021. 6. 8.
[백준] 1330번 python a,b = input().split() # split() 스페이스바를 구분으로 하여서 나눠 넣어주는 함수 a = int(a) b = int(b) if(a!=b): c = ">" if a>b else " 2021. 6. 8.