본문 바로가기

분류 전체보기

(116)
[BOJ][Python] 백준 10822번 - 더하기 문제 링크: https://www.acmicpc.net/problem/10822 10822번: 더하기 첫째 줄에 문자열 S가 주어진다. S의 길이는 최대 100이다. 포함되어있는 정수는 1,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제 풀이 문제 풀이랄께 있나... split()을 이용해서 파싱으로 구했다. 코드
[BOJ][Python] 백준 14889번 - 스타트와 링크 문제 링크: https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 문제 풀이 파이썬에서는 itertools 모듈이 있어서 조합을 구하기가 쉽다. n명의 인원 중에서 $n/2$의 인원을 뽑고 나머지 인원은 set으로 차집합시켜서 빼줬다. 스타트 팀과 링크 팀의 능력치를 각각 구해주고 min()과 abs()를 이용하여 최소가 되는 차를 구해줬다. 예제 2에서 N=6이므로 각각 3명을 뽑는 경우 중 스타트 팀이 (1, 3, 6), 링크 팀이 (2, 4, 5)라고 하자. 스타트..
[BOJ][Python] 백준 22993번 - 서든어택 3 문제 링크: https://www.acmicpc.net/problem/22993 22993번: 서든어택 3 좋은 전투 순서가 존재해서 준원이만 생존하고 나머지 플레이어가 모두 죽게 만들 수 있다면 Yes를, 반대로 전투가 어떤 순서로 이루어져도 준원이가 절대 최후의 생존자가 될 수 없다면 No를 www.acmicpc.net 문제 풀이 그리디 문제이다. 두 사람이 동시에 싸우지 못하니 그냥 준원이가 차례차례 한사람씩 싸운다 생각하자. 우리는 준원이를 최후의 생존자로 만들어야 하니 최적의 조건으로 맞춰줘야 하기 때문이다. 최후의 생존자로 만들기 위해서는 좋은 순서를 만들어줘야 하는데 약한 적부터 강한 적으로 오름차순 정렬을 해주면 된다. 약한 적이랑 만나면서 공격력을 올려주면 되는 것이다. 하지만 최후의 생..
[BOJ][Python] 백준 23031번 - 으어어... 에이쁠 주세요.. 문제 링크: https://www.acmicpc.net/problem/23031 23031번: 으어어… 에이쁠 주세요.. 밤이 되면 어두워지는 다솔관에는 좀비가 나온다는 괴담이 있다. 그 좀비들의 정체는 바로 시험 기간에 공부하느라 지친 학생들이었다. 지친 학생들은 멀리서 보면 흡사 좀비이므로 학생 좀비 www.acmicpc.net 문제 풀이 일단 전형적인 시뮬레이션 문제같다. 방향에 따라서 움직임이 변경되기 때문에 배열을 추가했다. 0은 북쪽, 1은 동쪽, 2는 남쪽, 3은 서쪽으로 맞춰주고, 스위치를 켰을 때 불이 8방향으로 켜지므로 배열을 추가했다. 그리고 좀비의 좌표를 확인하면서 추가했고, 처음 방향은 남쪽이므로 2를 추가해줬다. 여기서 많이 간과할 수 있는 케이스가 있다. 일단 아리가 움직여서 ..
[BOJ][Python] 백준 22938번 - 백발백준하는 명사수 문제 링크: https://www.acmicpc.net/problem/22938 22938번: 백발백준하는 명사수 백발백준은 무슨 과녁이던 백발백중하여 올림픽 금메달보다 따기 어렵다는 대한민국 양궁 국가대표 타이틀을 가지고 있다. 이런 백발백준이 현재 연마하는 스킬이 있는데... 바로 두 과녁을 www.acmicpc.net 문제 풀이 매우 쉬운 기하학 문제이다. 두 원의 반지름의 합이 두 원의 중심과의 거리보다 크면 겹치고, 작으면 안 겹친다. 접하는 경우도 있는데 문제에서 겹치지 않는 경우라고 지정해줘서 크면 YES, 그 외에는 NO를 출력하면 된다. 그리고 소소하게 점과 점 사이의 거리에서 루트를 안씌우고 반지름 합에 제곱을 해서 메모리를 조금 줄였다. 코드
[BOJ][Python] 백준 1504번 - 특정한 최단 경로 문제 링크: https://www.acmicpc.net/problem/1504 1504번: 특정한 최단 경로 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존 www.acmicpc.net 문제 풀이 N이 800개여서 플로이드로 풀려 했다. O($N^{3}$)으로 되는줄 알았는데 시간 초과가 났다. 그래서 그냥 다익스트라로 풀었다. s → v1 → v2 → e 혹은 s → v2 → v1 → e 중에서 짧은 거리를 출력해주면 된다. s → v1, s → v2 의 거리를 구할 때 다익스트라 1번, v1 → v2(= v2 → v1)..
[BOJ][Python] 백준 23056번 - 참가자 명단 문제 링크: https://www.acmicpc.net/problem/23056 23056번: 참가자 명단 첫째 줄에 학급 수인 $N$과 학급당 신청 가능한 인원수 $M$이 주어진다. ($N$은 짝수이고 $2\leq N \leq 10$, $1\leq M \leq 10$) 둘째 줄부터 신청된 순서대로 학생의 학급과 이름이 주어진다. 학생의 학급은 www.acmicpc.net 문제 풀이 일단 정렬 문제이다. 하지만 정렬 기준이 총 4개인데, 파이썬의 내장 함수가 있어서 튜플로 만들어서 정렬하면 된다. 또는 람다로 해도 되겠다만... 일단 입력 부분에 학급을 입력받을텐데 학급이 홀수면 0, 짝수면 1이란 변수를 만들어주자. 그리고 원소 N개 일차원 배열을 만들어주자. 학급을 입력받아서 카운트하기 위함이다. 카..
[BOJ][Python] 백준 4358번 - 생태학 문제 링크: https://www.acmicpc.net/problem/4358 4358번: 생태학 프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어 www.acmicpc.net 문제 풀이 골5치곤 그닥 어렵지 않은 문제인거 같다. 파이썬에서는 딕셔너리를 이용하여 나무들의 개수를 세어주고, 반복문을 돌려주면서 나무들의 총 개수도 같이 구해주자. 이때 EOF 처리를 해주어야 한다. 이후 정렬해주고 딕셔너리를 이용하면 O(1)만에 나무의 개수를 불러올 수 있다. 몇 %를 차지하는지 출력해야 하므로 (나무의 수)/(전체 나무의 수)*100을 해주자. 코드