Programming/Algorithm 237

[백준] #1002 터렛 python

https://www.acmicpc.net/problem/1002 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다. www.acmicpc.net 📕 설명 📕 세 가지 경우로 나뉘어 풀 수 있다. 1. 두 원이 동심원이고, 반지름이 같은 경우. 2. 두 원이 서로 다른 두 점에서 만날 경우. 3. 내접 or 외접 4. 그 외 원의 방정식에 대한 성질을 알고 있다면 쉽게 풀 수 있었을 것이다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 T = int(input()) result = [] for _ in range(T): x1, y1, r1, x2, y2, r2 = map(int, input().split())..

[백준] #3053 택시 기하학 python

https://www.acmicpc.net/problem/3053 3053번: 택시 기하학 첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다. www.acmicpc.net 📕 설명 📕 유클리드 기하학과 택시 기하학에 대한 설명을 토대로 풀이를 작성하였다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 import math R = int(input()) print(f'{R*R*math.pi:.6f}') print(f'{2*R*R:.6f}')

[백준] #2477 참외밭 python

https://www.acmicpc.net/problem/2477 2477번: 참외밭 첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지 www.acmicpc.net 📕 설명 📕 가장 큰 직각 사각형에서 작은 직각 사각형의 넓이를 알아내어 풀이하였다. 1. 직사각형을 나누어 두 가지로 분리하여 넓이를 구한다. 2. 큰 직사각형에서 작은 직사각형의 넓이를 빼어 넓이를 구한다. 두 가지 방법 중, 2번 방법으로 코드로 구현할 수 있을 것 같았다. 방향과 길이를 담은 list를 각각 만들고, 각 방향에 대해 방향이 1번 나오게 되면 그것은 큰 직사각형의 한 변의 ..

[백준] #4153 직각삼각형 python

https://www.acmicpc.net/problem/4153 4153번: 직각삼각형 입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다. www.acmicpc.net 📕 설명 📕 피타고라스 성질을 이용하여 가장 큰 변의 길이를 구하고, right or wrong을 출력한다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 result = [] while True: a,b,c = map(int,input().split()) if a == 0 and b == 0 and c == 0: break if a > b > c or a > c > b: length_max = pow(a, 2) length_1 =..

[백준] #3009 네 번째 점 python

https://www.acmicpc.net/problem/3009 3009번: 네 번째 점 세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오. www.acmicpc.net 📕 설명 📕 Counter를 사용하여 개수가 1개 사용된 것이 사용되지 않은 좌표의 각각의 값임을 이용하여 풀이하였다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 from collections import Counter C_x = [] C_y = [] for _ in range(3): x,y = map(int,input().split()) C_x.append(x) C_y.append(y) C_X = Counter(C_x) C_Y = Counter(C_y) x = '' y = '' for i ..

[백준] #1085 직사각형에서 탈출 python

https://www.acmicpc.net/problem/1085 1085번: 직사각형에서 탈출 한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램 www.acmicpc.net 📕 설명 📕 좌표에서 6가지 경우의 수를 고려하여 최솟값을 찾는다. 좌표에서 x,y축으로 가는 값, 오른쪽 위 좌표와의 축으로 가는 값, 그리고, 각각의 좌표축으로 가는 값이다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 x, y, w, h = map(int, input().split()) min_val_list = [] min_val_list.append(x) min_val_list.app..

[백준] #11478 서로 다른 부분 문자열의 개수 python

https://www.acmicpc.net/problem/11478 11478번: 서로 다른 부분 문자열의 개수 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. www.acmicpc.net 📕 설명 📕 itertools의 combinations를 사용하여 해결하였다. 이 경우, 여러 부분집합들이 연속된 string 에 포함되어야 하는데, 순서가 중요해진다. 이를 고려하여, str에 저장하여 풀이하였더니, 메모리 초과가 떴다. 그래서 join함수를 이용하여 다음과 같이 풀이하였더니 시간 초과가 발생하였다. from itertools import combinations S = input() result = 0 for i in range(len(s)): f..

[백준] #1269 대칭 차집합 python

https://www.acmicpc.net/problem/1269 1269번: 대칭 차집합 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어 www.acmicpc.net 📕 설명 📕 집합 A, B의 차집합을 각각 뺀 길이를 더한다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 A, B =map(int ,input().split()) A_set = set(map(int, input().split())) B_set = set(map(int, input().split())) print(len(A_set- B_set) + len(B_set - A_set))

[백준] #1764 듣보잡 python

https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 📕 설명 📕 Counter를 이용하여 개수를 세어 리스트에 담아서 출력하였다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 from collections import Counter N, M =map(int ,input().split()) i_cant_listen = [] i_cant_see = [] for i in range(N): i_cant_listen.append(input()) for i in range..

[백준] #10816 숫자 카드 2 python

https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 📕 설명 📕 1. N개의 숫자에 대해 dictionary에 넣어서 개수를 추가한다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 N = int(input()) N_list = list(map(int,input().split())) N_dict = {} for i in N_list: if i not in N_dict: N_dict[i] = 1 else: N_dict[i] += 1 ..