본문 바로가기

Algorithm

(32)
파이썬 알고리즘 연습(5) 시저 암호 처음 오답def solution(s, n): answer = "" for i in s: if i == " ": answer += " " elif i == "z" or i == "Z": answer += chr(ord(i) - 26 + n) else: answer += chr(ord(i) + n) return answer z만 처리해 줄 것이 아니라 나머지 문자도 범위를 초과해야 하는 경우 처리를 해 줘야 했음 정답ord() : 아스키코드값으로 변경해줌 -> 파이썬은 c언어와 다르게 명시적으로 함수를 사용해야 함chr() : 아스키코드를 문자로 변경def solution(s, n): ..
파이썬 알고리즘 연습(4) 1. 먼저, 세로가 가로보다 더 크다면 명함을 돌린다 2. 돌린 후에 가로와 세로의 최댓값을 찾는다 def solution(sizes): rotated = [] # 가로, 세로 길이 중에서 더 긴 값을 가로로 두기 -> 돌린다 for i in sizes: if i[0]
2606 바이러스 / DFS,BFS 접근 방법1. 먼저 연결 정보를 입력 받기n = int(input())m = int(input())# 1. 연결 정보에 대해 입력 받기con = []for _ in range(m): a, b = map(int, input().split()) con.append((a, b))# con = [[1, 2], [2, 3], [3, 5] ....] 2. 방문 여부를 확인하는 리스트 생성visited = [False] * (n+1) 3. 연결 정보 -> 그래프로 표현 (양방향 연결)graph = {} for i in range(1, n+1): graph[i] = [] # 결과 : {1: [], 2: [], 3: [], 4: [], 5: []} for a, b in con: ..
파이썬 알고리즘 연습(3) 삼총사def solution(number): answer = 0 for i in range(0, len(number)): for j in range(i+1, len(number)): for k in range(j+1, len(number)): if number[i] + number[j] + number[k] == 0: answer += 1 return answer 크기가 작은 부분 문자열첫 번째 시도 -> 하지만 테스트 케이스에서 시간 초과 및 빈 객체에 pop했다는 에러 뜸len(deq) >= len(p) 이  조건 또한 빼먹음import collectionsdef solution(t, p): ..
5430 AC / 큐 핵심덱을 R이 나올 때마다 뒤집으면 시간 초과가 뜸 -> 길이(N)만큼 걸리기 때문뒤집힌 상태인지 확인하는 변수를 만들어서 체크하면서 해결해야 함길이가 0인 리스트가 들어오면 덱을 초기화 시켜줘야 함문자열 다루기arr = input()[1:-1].split(',') : 입력받은 문자열에서 양옆제외하고 읽어온 후 ,을 기준으로 분리해서 값들을 배열로 저장deq = collections.deque(arr) : 배열 통째로 덱에 추가result = "[" + ",".join(map(str, deq)) + "]" , 을 사용하여 원소사이를 붙여줌import collectionst = int(input())ans = []for _ in range(t): ac = input() n = int(input(..
10866 덱 / 큐 import collectionsclass Deq: def __init__(self): self.deque = collections.deque() def push_front(self, value): self.deque.appendleft(value) def push_back(self, value): self.deque.append(value) def pop_front(self): if len(self.deque) == 0: return -1 return self.deque.popleft() def pop_back(self): if len(self.deque) == 0: ..
1966 프린터 큐 / 큐 배운 내용효율적으로 값 넣는 방법 -> 1 2 3 4 6 8 입력시data = list(map(int, input().split()))출처: https://thisismi.tistory.com/entry/백준-1966번-프린터-큐-파이썬-정답-코드 [This is Mi:티스토리]덱 안에 해당 숫자가 있는지 확인하는 방법 -> 값 in 덱덱에서 가장 앞에 있는 수 조회 -> 덱[0] / 가장 뒤에 있는 수 조회 -> 덱[-1] 접근 방식순서를 기록해야 하기 때문에, 순서 기록용 덱을 하나 더 생성해서 중요도를 담은 덱과 함께 추가와 제외를 함  정답import collectionsn_count = int(input())ans = []for _ in range(n_count): deque = colle..
파이썬 알고리즘 연습(2) 이상한 문자 만들기split() vs split(' ')의 차이입력: "hello world"split(): 공백 여러 개가 있어도 하나로 간주해서 분리 s = "hello world" print(s.split()) # Output: ['hello', 'world']split(' '): 공백을 기준으로 나누되, 연속된 공백을 빈 문자열로 취급 s = "hello world" print(s.split(' ')) # Output: ['hello', '', 'world']-> split(' ')을 사용하면 공백을 포함하여 입력받은 그대로 다시 출력할 수 있음def solution(s): words = s.split(' ') answer = "" for i in range(len(word..