알고리즘 문제풀이210 [백준] 6443 애너그램 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 단어의 글자들의 위치를 바꿔서 나오는 단어를 구해야 하므로 순열을 사용하였습니다. 중복되는 결과를 막기 위해서 집합을 사용하였습니다. 초기에 단어를 정렬하여 알파벳순으로 정렬하도록 했습니다. 또한, 시간을 줄이기 위해 집합으로 각 자릿수로 사용한 단어를 계속해서 추가했습니다. 2) 알고리즘 순열 백트래킹 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') def solution(n, ans): if n 2022. 1. 15. [백준] 15649 N과 M (1) 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 수열을 구해야하기 때문에 재귀를 이용하여 풀었습니다. 2) 알고리즘 재귀 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') def solution(n, ans): if n 2022. 1. 14. [백준] 1275 커피숍2 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 계속해서 값들이 변경이 일어나고, 랜덤한 범위의 합계를 구해야하므로 세그먼트 트리를 이용했습니다. 2) 알고리즘 세그먼트 트리 3) 풀이 코드 사용 언어 - Python import sys from math import ceil, log2 sys.stdin = open('input.txt') def init_tree(node, start, end): # 세그먼트 트리 값 할당 if start >= end: # 리프 노드 도달시 segment_tree[node] = num_list[start] # 숫자 리스트의 값 추가 linked[start-1] = node # 각 숫자가 위치한 리프 노드의 인덱스 저장 return segment_tree[node] .. 2022. 1. 13. [백준] 11505 구간 곱 구하기 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 주어지는 입력에 따라 값을 계속해서 변경하고, 변경된 값을 토대로 구간의 곱을 구해야 하므로 세그먼트 트리로 접근했습니다. 2) 알고리즘 세그먼트 트리 3) 풀이 코드 사용 언어 - Python import sys import math sys.stdin = open('input.txt') def init_tree(node, start, end): # 세그먼트 트리 초기화 (현재 노드의 번호, 노드의 범위 시작, 노드의 범위 끝) if start >= end: # 리프 노드에 도달한 경우 segment_tree[node] = num_li[start] # 리프 노드에 숫자 값 넣기 linked[start-1] = node # 연결관계에 리프노드의 인덱스 .. 2022. 1. 12. [백준] 14502 연구소 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 비어있는 공간들 중 3군데를 벽을 세워야 하므로 모든 조합을 구하기 위해 벽을 세울 좌표 조합을 구했습니다. 바이러스가 여러곳에서 동시에 퍼져야 하므로 BFS 탐색을 하였습니다. 바이러스가 퍼지면 안전 구역의 개수를 하나씩 줄여가며 답을 찾아나갔습니다. 2) 알고리즘 조합 BFS 3) 풀이 코드 사용 언어 - Python import sys from collections import deque from itertools import combinations sys.stdin = open('input.txt') def solution(): global ans q = deque(start_coordinates) # 바이러스가 있는 모든곳에서 시작 (BFS).. 2022. 1. 11. [프로그래머스] 수식 최대화 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 입력이 하나의 문자열로 주어지므로 각 문자열을 반복하여 숫자들과 연산자들을 각각 다른 리스트에 정리하였습니다. 연산자의 우선순위를 바꿔서 임의로 선정이 가능하여, 순열을 통해 경우의 수를 모두 구했습니다. 숫자와 연산자 리스트를 같이 순환하며 우선순위가 높은 연산자를 만나면 계산 하여 새로 저장했습니다. 연산자의 종류가 세가지이므로 세번 반복하여 풀이를 진행하였습니다. 2) 알고리즘 구현 3) 풀이 코드 사용 언어 - Python from itertools import permutations def solution(expression): answer = 0 # 정답 변수 op = ['*', '+', '-'] # 연산자 기호 _num_list = [] .. 2022. 1. 10. [프로그래머스] 보호소에서 중성화한 동물 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 보호소 들어올때와 나갈때의 정보를 모두 알아야 하므로 조인으로 접근했습니다. WHERE 으로 특정 조건에 맞게 설정하였습니다. 2) 풀이 코드 사용 언어 - MySQL SELECT ai.animal_id, ai.animal_type, ai.name -- 출력 열 FROM animal_ins AS ai JOIN animal_outs AS ao ON ai.animal_id = ao.animal_id -- 조인 WHERE ai.SEX_UPON_INTAKE LIKE "Intact%" AND ao.SEX_UPON_OUTCOME IN ("Spayed Female", "Neutered Male") -- 들어올때 중성화 되지 않았으나 나갈때 중성화 된 동물들 ORD.. 2022. 1. 9. [프로그래머스] 후보키 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 후보키의 조합을 구해야하므로 조합을 구하는 모듈을 사용했습니다. 유일성과 최소성을 확인하기 위하여 집합을 사용하였습니다. 2) 알고리즘 조합 3) 풀이 코드 사용 언어 - Python from itertools import combinations # 조합 구하기 위한 모듈 임포트 def solution(relation): R = len(relation) # DB 행의 개수 C = len(relation[0]) # DB 열의 개수 cols = set() # 유일성과 최소성을 만족하는 후보키 목록 for i in range(1, C+1): # 열이 선택되는 개수 combs = list(combinations(range(C), i)) # 열이 i개 선택했을.. 2022. 1. 9. [백준] 14600 샤워실 바닥 깔기 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 안쪽으로 영역을 나누어서 타일을 설치해야하므로 분할정복으로 접근했습니다. 2) 알고리즘 분할정복 3) 풀이 코드 사용 언어 - Python import sys def solution(r, c, k, area): # 시작 좌표, 제곱 수, 구역 global num if k 2022. 1. 8. [프로그래머스] 동명 동물 수 찾기 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 이름이 없는 동물은 개수를 확인할 필요가 없으므로 WHERE 절에서 조건을 걸러냈습니다. 2) 풀이 코드 사용 언어 - MySQL SELECT name, COUNT(animal_id) AS cnt -- 출력 열 FROM animal_ins WHERE name IS NOT NULL -- 이름이 없는 경우는 필요 없으므로 GROUP BY name -- 이름을 그룹화 HAVING COUNT(animal_id) >= 2 -- 이름이 나온 횟수가 2회 이상을때 ORDER BY name; 📝 결과 및 학습한 내용 1) 어려웠던 내용 특별히 없습니다. 2) 새롭게 학습한 내용 특별히 없습니다. 🔗 문제 링크 - https://programmers.co.kr/lea.. 2022. 1. 7. [백준] 17141 연구소2 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 2차원 배열을 상하좌우를 탐색하여야 하고, 시간의 흐름에 따라 상하좌우 이동하며 바이러스를 퍼트려야 하므로 BFS 탐색으로 접근하였습니다. 2) 알고리즘 BFS 3) 풀이 코드 사용 언어 - Python import sys from collections import deque from itertools import combinations sys.stdin = open('input.txt') def BFS(starts): # 너비 우선 탐색 global remain_empty visited = [[0] * N for _ in range(N)] # 좌표 방문 여부 체크 리스트 q = deque(starts) for n in q: # 첫 시작점 방문 체크 .. 2022. 1. 7. [백준] 1865 웜홀 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 노드간 가중치에 음수가 포함이 되어 다익스트라로는 해결이 어렵다고 생각하여 이전에 학습한 '벨만-포드' 알고리즘을 적용했습니다. 어떠한 지점에서 출발하여 다시 그 지점으로 돌아왔을때 시간이 줄어드는 경우를 찾아야 하는데, 만약에 한번 확인을 하여 계속 해서 값이 줄어드는 싸이클이 존재하는지 여부만 찾으면 된다고 생각했습니다. 2) 알고리즘 벨만-포드 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') def solution(): distance[1] = 0 # 출발 도시 거리는 0으로 초기화 for i in range(1, N+1): # 도시의 개수만큼 반복하여 확인 for j in ra.. 2022. 1. 6. 이전 1 ··· 11 12 13 14 15 16 17 18 다음