본문 바로가기

Algorithm

(66)
문자열 내맘대로 정렬하기 / 프로그래머스 첫 번째 접근인덱스로 뽑은 키들과 원래 문자열을 딕셔너리로 만들기키를 정렬한 후 정렬된 키를 바탕으로 새로운 딕셔너리 만들기중복 키 처리가 곤란함s = ["csdf", "bbb", "cccc"]n = 1dic = {}idx = []for i in s: dic[i[n]] = iprint(dic.keys())sorted_key = sorted(dic.keys())new_dic = {}for i in sorted_key: new_dic[i] = dic[i]print(new_dic.values()) 정답키를 뽑은 인덱스와 원래값을 함께 담은 리스트생성인덱스 순으로 정렬하고, 인덱스가 동일하다면 원래 문자열값과 비교def solution(strings, n): answer = [] num =..
숫자 문자열과 영단어 / 프로그래머스 정답 (replace 사용 버전)dictionary.items(): 딕셔너리의 키벨류 값을 동시에 가져옴print(num_dict.items())# dict_items([('zero', '0'), ('one', '1'), ('two', '2'), ..., ('nine', '9')])s.replace(key, value) : key를 value값으로 변경해줌def solution(s): dictionary = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9"} for key, value in dicti..
시저 암호 / 프로그래머스 시저 암호 처음 오답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): ..
최소직사각형 / 프로그래머스 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: ..
크기가 작은 부분 문자열 / 프로그래머스 삼총사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: ..