본문 바로가기
728x90
반응형

알고리즘45

백준 17298번 오큰수 문제 파이썬 풀이 오큰수 시간 제한메모리 제한제출정답맞힌 사람정답 비율 1 초 512 MB 48250 16000 11599 32.571% 문제 크기가 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 ≤ .. 2022. 9. 7.
백준 10773 파이썬 k=int(input()) stack=[] for i in range(k): temp=int(input()) if(temp==0): stack.pop() else: stack.append(temp) sum(stack) sum(stack)이 아니라 print(sum(stack)) 2022. 9. 2.
10828 스택 파이썬 풀이 import sys n = int(sys.stdin.readline()) stack=[] for i in range(n): com= sys.stdin.readline().split() if com[0] =="push": stack.append(com[1]) elif com[0]=="pop": if(len(stack)==0): print(-1) else: print(stack.pop()) elif com[0]=="size": print(len(stack)) elif com[0]=='empty': if len(stack)==0: print(1) else: print(0) elif com[0]=='top': if(len(stack)==0): print(-1) else: print(stack[-1]) com=l.. 2022. 9. 2.
11054번 바이토닉 부분 수열 알고리즘 N=int(input()) List = list(map(int, input().split())) dp1 = [1]*N dp2 = [1]*N sub_len=[0]*N Max=0 for i in range(N): for j in range(i): if List[i] > List[j]: dp1[i] = max(dp1[i], dp1[j]+1) List.reverse() for i in range(N): for j in range(i): if List[i]>List[j]: dp2[i]=max(dp2[i],dp2[j]+1) dp2.reverse() for i in range(N): sub_len[i]=dp1[i]+dp2[i] print(max(sub_len)-1) 증가, 감소 각각 구해서 더한 후 가장 큰 값을 출.. 2022. 8. 29.
백준 10816번 숫자 카드 2번 시간초과 Counter 내장함수 이용 from collections import Counter N=int(input()) list1=list(map(int,input().split(' '))) list1.sort() M=int(input()) list2=list(map(int,input().split(' '))) count=Counter(list1) for i in range(len(list2)): if(list2[i] in count): print(count[list2[i]],end=' ') else: print(0,end=' ') 10815랑 비슷한 문제 처음에 무지성 for문 했다가 오류날 것 같아서 list.count(3) 함수를 통해 리스트 안의 요소를 세어 출력했다. 그런데 시간 초과가 났다. 모두 탐색해서 그런걸까? 이진탐색을 .. 2022. 8. 20.
백준 1620번 나는야 포켓몬 마스터 이다솜 파이썬 풀이 시간 초과 해결 N,M=map(int,input().split()) dic={} for i in range (1, N+1): temp=input() dic[i]=temp dic[temp]=i for k in range (M): temp=input() if( temp.isdigit()): print(dic[int(temp)]) else: print(dic[temp]) 문제가 살짝 병맛..? 포켓몬을 재밌게 하고 만들었나 (。・ˇ_ˇ・。) 처음에는 역시 런타임 에러 for문으로 무지성 돌리기 했는데 시간 초과가 난다 정답은 딕셔너리 형태로 저장하는것! {1:피카츄, 피카츄:1, 2:꼬부기, 꼬부기:2 ........} 이런식으로 저장한다 문자가 정수인지 확인하는 함수 temp.isdigit() 변수뒤에 isdigit()을 .. 2022. 8. 19.
백준 14425번 문자열 집합 문제 파이썬 풀이 시간 초과 문자열 집합 시간 제한메모리 제한제출정답맞힌 사람정답 비율 2 초 (하단 참고) 1536 MB 17743 9681 7138 54.435% 문제 총 N개의 문자열로 이루어진 집합 S가 주어진다. 입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다. 입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다. 출력 첫째 줄에 M개의.. 2022. 8. 19.
백준 10815 파이썬 숫자 카드 문제 시간초과 해결 이진탐색 쉬운 줄 알았는데.. 시간 초과 오류가 났다!! 이유는? in탐색은 하나하나 다 하기에 시간 복잡도가 O(n)이 걸려 오래걸린다 따라서 시간 복잡도를 줄여야함 이진 탐색을 이용하자 이진 탐색이란? 중간값을 값과 비교하고 왼쪽 오른쪽 이동해가면서 구하는 거 이진 검색 알고리즘은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식을 채택하고 있다. 위키백과에서 가져온 정의 N=int(input()) str1=list(map(int, input().split(' '))) str1.sort() M=int(input()) str2=list(map(int, input().split(' '))) arr .. 2022. 8. 14.
백준 2231번 분해합 파이썬 풀이 문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다. 예제 입력 1 복사 216 예제 출력 1 복사 198 1부터 M까지 올라가면서 분해합을 구하.. 2022. 8. 1.
728x90
반응형