분류 전체보기 54

[python] 백준 5430번 : AC (골드 5)

https://www.acmicpc.net/problem/5430해당 문제에서 틀렸던 점은 시간복잡도가 주 원인 이였다.1. R 명령어를 받을 때 모든 배열을 뒤집어 주면 O(N)의 시간 복잡도가 발생하므로 시간 초과가 발생하게 된다.이를 해결하려면 R 명령을 받을때마다 배열을 뒤집어 주지 않고 현재 상태가 정상적인 상태인지 뒤집어진 상태인지만 표시하면 된다. 뒤집어진 상태에서 D 명령을 받으면 뒤에서 빼주고 정상적인 상태라면 앞에서 빼주면 된다. (2. list 의 경우 앞에 있는 인덱스의 값을 제거할 경우 이 또한 시간 복잡도가 많이 발생하므로 큐로 해주어야 한다.3. 출력 또한 배열로 되어있지만 배열로 출력을 하면 오류가 난다. str형식으로 배열 형태를 갖추어서 출력해주어야 한다.import co..

코딩테스트 2024.07.11

[python] 백준 1620번 : 나는야 포켓몬 마스터 이다솜 (실버 2)

https://www.acmicpc.net/problem/1620해당 문제는 시간 초과 문제가 발생하였다. 그이유는 다음과 같다.리스트 하나로 index에는 번호를 넣고 value 에는 포켓몬 이름을 넣게 되면 이름으로 index를 찾을때에 list.index(value)는 O(N)의 시간복잡도가 발생한다고 한다. 이에 대한 해결방법은 딕셔너리 추가로만들어 key 에 포켓몬 이름을 넣고 value 에는 숫자를 넣어주는 것이다. 그렇게 되면 O(1) 의 시간복잡도를 가지게 되어 시간초가가 발생하지 않는다.import sysinput = sys.stdin.readlinen , m = map(int,input().split())namebook = dict()book = ['']count = 0for _ in ..

코딩테스트 2024.07.11

[python] 백준 11723 : 집합 (실버 5)

https://www.acmicpc.net/problem/11723입력 갯수가 2개 1개 이므로 리스트로 입력을 받아야 한다.나머지는 명령어에 맞게 조건문을 완성해 주면 된다.해당 문제를 풀면서 발생한 오류1. 런타임 에러 remove를 사용 하였을때에 제거 하려는 값이 존재하지 않으면 keyerror 가 발생한다. 이를 방지하기 위해서 discard 함수를 사용하여 존재하지 않는 값을 제거할 때에도 에러가 발생하지 않게 한다.2. 시간 초과sys로 입력을 받으면 I/O 에 소요되는 시간을 줄여 해결할 수 있다.import sysinput = sys.stdin.readlinem = int(input())S = set()for _ in range(m): command = list(input().spl..

코딩테스트 2024.07.11

[python] 백준 1012번 : 유기농 배추 (실버2)

https://www.acmicpc.net/problem/1012런타임 오류가 발생하였다. chat gpt 에게 물어보니 Python의 기본 재귀 한도는 1000으로 설정되어 있으며, 이 한도를 초과하면 RecursionError가 발생한다고 한다.def move(row,col): vegetable[row][col] = False if len(vegetable) > row+1 and vegetable[row+1][col] : move(row+1,col) if row-1 >= 0 and vegetable[row-1][col] : move(row-1,col) if len(vegetable[0]) > col+1 and vegetable[row][col+1] : ..

코딩테스트 2024.07.10

[python] 백준 1003번 : 피보나치 함수 (실버3)

https://www.acmicpc.net/problem/10031. 전역 변수로 0 과 1을 방문 했을때마다 갯수를 세주어야 함.2. 문제에 있는 코드를 그대로 사용할 경우 시간 초과 문제가 발생함.아래 코드로 하면 결과는 잘 나오지만 시간 초과가 발생한다. 그 이유는 시간 복잡도가 O(n^2) 이기 때문이다.def fibonacci(n): global count0 global count1 if n == 0: count0 += 1 return 0 elif n == 1: count1 += 1 return 1 else: return fibonacci(n-1)+fibonacci(n-2)t = int(input())for..

코딩테스트 2024.07.10

[python] 백준 30802번 : 웰컴 키트

https://www.acmicpc.net/problem/30802n : 전체 인원 수shirts : 각 사이즈 별 인원 수 리스트t , p : 티셔츠 와 펜의 한 묶음의 갯수티셔츠의 경우는 남아도 되지만 모자르면 안되므로 묶음 수로 나누었을 때 나머지가 나오면 한 묶음을 더해주어야 한다.펜의 경우는 몪과 나머지를 각각 출력해주면 된다.n = int(input())shirts = list(map(int,input().split()))t , p = map(int,input().split())maxt = maxp = pen = 0for shirt in shirts: if shirt % t > 0: temp = (shirt//t) + 1 else: temp = (shirt/..

코딩테스트 2024.07.09

[python] 백준 28702번 : FizzBuzz

https://www.acmicpc.net/problem/28702fizzbuzz 의 경우 3개 이상 연속되어서 나오는 경우는 없다.따라서 숫자가 나올때 해당 숫자로 부터 순서를 더해줘서 값을 구하면 된다.for i in range(1,4): temp = input() if temp == 'FizzBuzz' or temp=='Fizz' or temp=='Buzz': continue else: number = int(temp) count = ifor j in range(count,4): number += 1if number % 15 == 0: print('FizzBuzz')elif number % 3 == 0 and number%5 != 0:..

코딩테스트 2024.07.09

[python] 백준 18110번 : solved.ac

https://www.acmicpc.net/problem/18110 해당 문제를 풀었을 때 나의 경우 런타임에러와 오답이 많이 되었던 문제이다.런타임 에러 이유 : n == 0 일 경우 처리를 해주어야 함오답 이유 : round() 함수에 있다. 5의 경우 반올림 해주지 않는다. 5를 초과해야 반올림 해준다.이름 해결하기 위해서 0.5 를 더하고 int 로 정수로 만들어 주면 된다. import sysinput = sys.stdin.readlinen = int(input())dic = dict()arr = [int(input()) for _ in range(n)]exce = int((n*0.15)+0.5)arr.sort()if n == 0: print(0)else: print(int((sum(..

코딩테스트 2024.07.09

[python] 백준 10989번 : 수 정렬하기 3

https://www.acmicpc.net/problem/10989해당 문제는 메모리 초과가 많이 발생한 문제이다.아래는 메모리 초과가 발생한 코드이다.import sysinput = sys.stdin.readlinen = int(input())arr = []for i in range(n): arr.append(int(input()))arr.sort()for i in arr: print(i)첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어지므로 리스트가 너무 길게 생성되어 메모리 초과가 일어난다. 하지만 수의 범위는 10,000 이므로 중복되는 숫자가 많다. 따라서 dict 를 이용하여 1~10,000 개에 해당하는 길이의 딕셔너리만 생성하면 메모리 초과가 발생하지 않는다.impor..

코딩테스트 2024.07.08