알고리즘 150

[프로그래머스 | Lv1] 숫자 문자열과 영단어 (Python) - 2021 카카오 채용연계형 인턴십

https://school.programmers.co.kr/learn/courses/30/lessons/81301 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 숫자 문자열을 리스트에 저장해주고 s에 일치하는 문자열이 있으면 숫자로 replace해준다. 처음엔 딕셔너리에 저장했지만 생각해보니 리스트로 해도 돼서 바꿨다. # 프로그래머스 81301: 숫자 문자열과 영단어 (2021 카카오 채용연계형 인턴십) def solution(s): num = ["zero", "one", "two", "three", "four", "five", "six", "seven..

[프로그래머스 | Lv1] 신고 결과 받기 (Python) - 2022 KAKAO BLIND RECRUITMENT

https://school.programmers.co.kr/learn/courses/30/lessons/92334 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 중복 제거를 위해 report를 set으로 만들어주고 딕셔너리를 하나 만들어서 key(신고한id):value(이용자id - list 형태)로 저장해줬다. 그 후 딕셔너리를 돌면서 value값이 k보다 크거나 같을 때 key값의 answer값을 하나씩 증가시켰다. # 프로그래머스 92334: 신고 결과 받기 (2022 KAKAO BLIND RECRUITMENT) def solution(id_list..

[프로그래머스 | Lv1] 성격 유형 검사하기 (Python) - 2022 KAKAO TECH INTERNSHIP

https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 각 성격 유형들을 딕셔너리로 만들어주고 choice 값에 따라 해당 유형의 값을 증가시켰다. 마지막에 순서에 맞게 성격 유형의 값을 출력해준다. 처음 제출한 코드 # 프로그래머스 118666: 성격 유형 검사하기 (2022 KAKAO TECH INTERNSHIP) def solution(survey, choices): answer = '' personalities = { "R" : 0, "T" ..

백준 1766: 문제집 (Python)

https://www.acmicpc.net/problem/1766 1766번: 문제집 첫째 줄에 문제의 수 N(1 ≤ N ≤ 32,000)과 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐 두 정수의 순서쌍 A,B가 빈칸을 사이에 두고 주 www.acmicpc.net 위상정렬을 이용해서 풀면 되는데 '먼저 푸는 것이 좋은 문제'에 대한 정보를 간선으로 저장하고 가능하면 쉬운 문제를 먼저 풀어야 하는데 난이도는 1번~n번 차례대로 되어 있으니 큐를 오름차순으로 정렬해서 쓰면 된다. -> 우선순위 큐 사용함 # 우선순위큐 from queue import PriorityQueue # 생성 q = PriorityQueue() q = Pr..

알고리즘/백준 2022.08.05

백준 2252: 줄 세우기 (Python)

https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net import sys from collections import deque input = sys.stdin.readline n, m = map(int, input().split()) students = [[] for _ in range(n+1)] # 간선에 대한 정보 (순서 저장) indegree = [0] * (n+1) # 진입차수 for _ in ran..

알고리즘/백준 2022.08.05

백준 2887: 행성 터널 (Python)

https://www.acmicpc.net/problem/2887 2887번: 행성 터널 첫째 줄에 행성의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개 줄에는 각 행성의 x, y, z좌표가 주어진다. 좌표는 -109보다 크거나 같고, 109보다 작거나 같은 정수이다. 한 위치에 행성이 두 개 이 www.acmicpc.net 처음에는 1774번(우주신과의 교감) 문제처럼 비용에 따른 간선을 모두 정의해주었다. 하지만 문제 조건에서 n의 수가 굉장히 크기 때문에 메모리 초과가 발생한다. import sys input = sys.stdin.readline def find(parent, x): if parent[x] != x: parent[x] = find(parent, parent[x]) ..

알고리즘/백준 2022.08.04

백준 1774: 우주신과의 교감 (Python)

https://www.acmicpc.net/problem/1774 1774번: 우주신과의 교감 (1,1) (3,1) (2,3) (4,3) 이렇게 우주신들과 황선자씨의 좌표가 주어졌고 1번하고 4번이 연결되어 있다. 그렇다면 1번하고 2번을 잇는 통로를 만들고 3번하고 4번을 잇는 통로를 만들면 신들과 선자씨끼 www.acmicpc.net 크루스칼 알고리즘에서 이미 연결된 노드들을 미리 연결해주고 노드들의 간선을 직접 정의해주면 되는 문제다 처음 생각했던 건 이미 연결된 통로들을 따로 저장하고 합친 후 그 통로들을 빼고 간선들을 모두 돌면서 union하는 거였는데 시간 초과가 떴다ㅠ def find(parent, x): if parent[x] != x: parent[x] = find(parent, pare..

알고리즘/백준 2022.08.04

백준 1197: 최소 스패닝 트리 (Python)

https://www.acmicpc.net/problem/1197 1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 www.acmicpc.net 일반적인 크루스칼 알고리즘으로 풀면 된다. 1. 간선 -> 비용 기준 오름차순 정렬 2. 사이클이 발생하지 않으면(= parent가 같지 않으면) union 한번 에러났었는데,,, 어이없게도 cost 기준으로 정렬한다는 생각에 사로잡혀서 간선에 대한 정보 a, b, c를 입력 받을 때 c, a, b로 입력받음,,ㅎ 실수하지 말자 import sys s..

알고리즘/백준 2022.07.29

백준 4195: 친구 네트워크 (Python)

https://www.acmicpc.net/problem/4195 4195번: 친구 네트워크 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진 www.acmicpc.net 입력받는 요소가 사람이름이기 때문에 숫자로 관리하기 위해 딕셔너리(people)를 선언하고 1. a, b 입력받아서 2. 딕셔너리에 존재하지 않으면 추가, parent 추가 3. union 그 후 연결되어 있는 요소들의 개수를 출력하기 위해 원래 count 함수를 썼는데 제대로 못 잡아내길래 for문을 썼다 ㅎㅎ시간초과 import sys sys.setrecursionlimit(1000..

알고리즘/백준 2022.07.28

백준 1976: 여행 가자 (Python)

https://www.acmicpc.net/problem/1976 1976번: 여행 가자 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인 www.acmicpc.net 문제의 해결법은 쉽게 생각해낼 수 있었다. 입력된 여행 계획의 도시들이 서로 연결되어 있는지만 확인하면 된다. 도시들의 연결 정보를 입력받을 때 1이면 union해준다. 계획을 입력받은 후 시간을 줄이기 위해 리스트에서 중복 원소를 제거해주고 find를 통해 모두 같은 부모를 가지고 있는지(= 하나의 집합인지) 확인해주면 된다. def find_parent(parent, x): if parent[..

알고리즘/백준 2022.07.28