[파이썬] 2981번. 검문 풀이
·
알고리즘과 코딩 테스트/백준 25단계
잘 생각해보자. N개의 주어진 수가 각각 A, B, C 라고 하자. 이때, 문제에 따르면 A, B, C를 이렇게 M으로 표현할 수 있다. A = M x a(미지수인 몫) + R(항상 일정한 나머지) B = M x b + R C = M x c + R 여기서 R을 제거하기 위해 A에서 B를, B에서 C를 뺀다고 하면 다음과 같은 식이 성립한다. A - B = M(a - b) B - C = M(b - c) 그렇다면 M은 A-B 와 B-C의 공약수이다. 이런 원리로, A~Z까지 입력받은 모든 수에 대해(오름차순), M은 B - A, C - B, ...... Z - Y의 공약수들이다. 즉, 이웃한 것끼리 뺀 수들의 최대공약수의, 1을 제외한 모든 약수가 M이 될 수 있는 것이다. from math import g..
[파이썬] 1002번. 터렛 풀이
·
알고리즘과 코딩 테스트/백준 25단계
[이 문제의 핵심] == 을 사용할 때는 주의하자! 컴퓨터는 모든 실수를 정확하게 저장하지 않는다. import math T = int(input()) for _ in range(T): x1, y1, r1, x2, y2, r2 = map(int, input().split()) if (x1 == x2 and y1 == y2 and r1 == r2): # 같은 좌표에서 같은 반지름이면 원이 겹친다. print(-1) continue if (r2 > r1): # r2는 항상 r1보다 작게끔 한다. (x1, y1, r1, x2, y2, r2) = (x2, y2, r2, x1, y1, r1) 경우의 수를 쉽게 생각하기 위해, 두 번째 좌표의 반지름 r2는 r1보다 무조건 작도록 하였다. xy_distance_po..
[파이썬] 2477번. 참외밭 풀이
·
알고리즘과 코딩 테스트/백준 25단계
문제에 나올 수 있는 도형의 모양은, 무조건 변이 6개이므로 큰 사각형에서 작은 사각형을 뺀 모양이다. K = int(input()) input_list = [] for _ in range(6): input_list.append(list(map(int, input().split()))) 큰 사각형의 넓이는 방향이 동쪽, 서쪽(1, 2)인 것중에 큰 값과 -> 가로 남쪽, 북쪽(3, 4)인 것중에 큰 값 -> 세로를 곱하면 된다. max_width = 0 max_height = 0 for i in range(6): if (input_list[i][0] == 1 or input_list[i][0] == 2): if (input_list[i][1] > max_width): max_width = input_li..
[파이썬] 3009번. 네 번째 점 풀이
·
알고리즘과 코딩 테스트/백준 25단계
처음 직접 풀었던 풀이 -> 복잡하고, 한 눈에 무슨 풀이인지 파악하기 쉽지 않았다. 입력도 3번에 걸쳐서 받고, 코드는 중복되고, count는 직접 계산해서 더욱 복잡했다. x_origin_count = 0 y_origin_count = 0 first_point = list(map(int, input().split())) x_origin = first_point[0] y_origin = first_point[1] x_twice = 0 y_twice = 0 second_point = list(map(int, input().split())) if (x_origin != second_point[0]): x_origin_count += 1 x_twice = second_point[0] if (y_origin ..
심화 알고리즘
·
알고리즘과 코딩 테스트/파이썬 문법
1. numpy 없이, 2차원 리스트(행렬) Slicing 하기 2차원 행렬 board에서 M x N 행렬을 빼낸다고 가정하면 m = row 수 n = column 수 i = row 인덱스 j = column 인덱스 m, n = 3, 2 for i in range(len(board) + 1 - m): for j in range(len(board) + 1 - n): [row[j:j+n] for row in board[i:i+m]] 이런식으로 하면 될 것이다! 2. 최대공약수를 유클리드 호제법으로 구하고, 이어서 최소공배수까지 구하기 유클리드 호제법이란 숫자 a, b가 있을 때, [a를 b로 나눈 나머지와 b의 최대공약수] 와 [그냥 a 와 b의 최대공약수]가 같다는 것을 의미한다. 그렇다면, a를 b로 나..
기초
·
알고리즘과 코딩 테스트/파이썬 문법
0. 유용한 파이썬 내장 메서드 1) eval() 수학 수식이 "문자열 포맷"으로 들어오면, 해당 수식을 계산한 결과를 반환한다. result = eval("(3 + 5) * 7") print(result) # 56 2) 딕셔너리.items() 딕셔너리에 있는 키와 값들의 쌍을 얻을 수 있다. car = {"name" : "BMW", "price" : "7000"} car.items() -> [('name', 'BMW'), ('price', '7000')] 3-1) input().split(':') 콜론 ':' 기호를 기준으로 자른다. 3-2) print(?, ?, sep=':') 콜론 ':' 기호를 사이에 두고 값을 출력한다. sep는 분류기호(seperator)를 의미한다. 4) 문자열.isdigit..