본문 바로가기

전체 글91

[SW마에스트로] 소프트웨어 마에스트로 14기 합격 수기 어쩌다 보니 소마를 붙었습니다. 개인적으로 활동이 너무 없어서 떨어지지 않을까 했는데, 운이 좋게도 붙게 되어서 앞으로 거의 노베로 소마를 지원하시는 분들께 제 경험이 도움이 될 수도 있을 것 같아 글을 쓰게 되었습니다. 글을 쓰는 능력이 부족하지만 제 글이 도움이 될 수 있으면 좋겠습니다. 1. 왜 지원했나요 사실 소마를 하겠다고 생각한 건 대학을 입학할 때였습니다. 새내기 카페에서 소마를 했던 친구 프로필을 봤는데, 그때 소마에 관심이 생겨서 대학 다니면서 한 번 해보고 싶다고 생각했어요. 거기다 소마를 붙으면 돈을 꽤 많이 받기도 해서, 돈 없는 대학생한테는 이거만 한 게 없다고 생각했습니다. 2. 현재 상태 점검 소마 14기를 지원해야겠다고 생각하고 나서는 이것저것 글을 찾아봤습니다. 자소서도 쓰.. 2023. 3. 26.
백준(BOJ) 2258 정육점(Python) 그리디 문제. 원하는 양의 고기를 살 수 없는 경우부터 살펴보면, 이는 당연히 모든 고기를 사도 무게가 부족한 경우일 것이다. 따라서 위의 경우는 제외해준다. 그 후에는 입력받은 고기들을 가격으로 오름차순 정렬한 뒤 무게로 내림차순 정렬해줬다. 문제에서는 어떤 고기를 샀을 때 해당 고기보다 싼 고기들만 가격을 내지 않고 가져갈 수 있으므로, 같은 가격의 고기들을 사는 경우 가장 무게가 많이 나가는 고기를 사는 것이 유리하기 때문에 위와 같이 정렬해줬다. 그 후에는 정렬된 순서대로 고기를 담으며 무게를 체크해줬다. 이때 현재까지 담은 고기의 무게가 목표 무게 이상인 경우, 목표 무게를 달성했을 때의 전체 가격 중 최솟값으로 ans를 수정해준다. 코드는 다음과 같다. # -*- coding: utf-8 -*.. 2023. 2. 24.
백준(BOJ) 20530 양분(Python) DFS 문제. 일반적인 트리에서는 u번 정점에서 v번 정점으로 가는 단순 경로가 1개 존재한다. 그러나 트리에 하나의 간선이 추가되면, 이 때는 이야기가 달라진다. 트리에 하나의 간선이 추가됨으로써 그래프 내에는 반드시 하나의 사이클이 발생한다. 사이클이 발생하게 되면 해당 사이클을 기점으로 단순 경로의 개수에 변화가 생긴다. 사이클 위에 있는 정점은 모두 사이클을 도는 두 가지의 방향에 따라 단순 경로가 생기고, 그 외에도 사이클 위에 있는 정점에서 다른 사이클 위에 있는 정점과의 간선을 제거해 얻을 수 있는 각 트리 간의 단순 경로 역시 2개이다. 즉, 사이클 위에 있는 각 정점에서 다른 사이클 위에 있는 정점과의 간선을 제거해 얻을 수 있는 트리들을 구하고, 각 쿼리마다 들어오는 정점들이 서로 다른.. 2023. 2. 18.
백준(BOJ) 14466 소가 길을 건너간 이유 6(Python) BFS 문제. 길을 건너지 않고 만날 수 있어야 한다는 말은, 길을 건너서는 안 된다는 것으로 해석할 수 있다. 따라서 길로 연결된 두 목초지 사이가 벽으로 막혀있다고 생각하고 문제를 풀 수 있다. N이 그렇게 크지 않기 때문에, 4차원 리스트를 이용해 두 목초지 사이에 길이 존재하는 지를 저장한다. 그 후에는 전체 농장의 각 구역에 들어 있는 소의 수를 각각 세고, 이들을 각자 서로 곱한 값의 합을 출력하면 된다. 코드는 다음과 같다. # -*- coding: utf-8 -*- import sys from collections import deque import heapq import bisect import math from itertools import product from itertools im.. 2023. 2. 14.
백준(BOJ) 17142 연구소 3(Python) BFS 문제. N과 M이 그렇게 크지 않기 때문에, 바이러스를 활성화시킬 수 있는 모든 경우에 대해 BFS를 돌릴 수 있다. 모든 경우 중 칸을 다 채울 수 있으면서 가장 시간이 적게 걸리는 경우를 찾으면 된다. 이 때 주의할 점은, 모든 칸에 "바이러스"가 존재하는 경우를 찾아야 하므로 비활성화된 바이러스를 활성화시키는 경우는 칸을 채운 것으로 간주해선 안 된다. 코드는 다음과 같다. # -*- coding: utf-8 -*- import sys from collections import deque import heapq import bisect import math from itertools import product from itertools import combinations """ from it.. 2023. 2. 14.
백준(BOJ) 5557 1학년(Python) DP 문제. 중간에 나오는 수의 크기가 0에서 20 사이이고, N의 크기가 100이므로 DP로 충분히 풀 수 있을 거라 생각했다. 처음부터 연산 기호가 들어가야 할 때 + 또는 - 연산을 진행해 그 값을 DP 리스트에 집어넣었다. 각 단계마다 0부터 20까지 등장할 수 있는 경우의 수를 저장하는 DP 리스트를 사용하면 된다. 코드는 다음과 같다. # -*- coding: utf-8 -*- import sys from collections import deque import heapq import bisect import math from itertools import product from itertools import combinations """ from itertools import combinat.. 2023. 2. 14.