Problem Solving/BOJ(36)
-
BOJ 1978. 소수 찾기 (Python)
BOJ 1978. 소수 찾기 https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 풀이 입력 받은 수들을 모두 한번씩 소수인지 검사 하면 된다. is_prime()함수는 간단하다. def is_prime(n) -> bool: if n == 1: return False i = 2 while i < n: if n % i == 0: return False else: i += 1 return True 1은 소수가 아니므로 False 리턴 무언가로 나눠지면 소수가 아니므로 False 리턴 (자기 자신과는 무조건 나누어 떨어진다..
2021.02.15 -
BOJ 1920. 수 찾기 (Python)
BOJ 1920. 수 찾기 https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 풀이 이진 탐색(Binary Search) 으로 풀었다. 이진탐색의 원리는 이러하다. 탐색하고자 하는 리스트를 오름차순으로 정리한다. target < 중앙값 이면 target은 중앙값의 왼쪽에 있으므로 end(index)를 중앙값index - 1 로 설정하고 중앙값의 오른쪽은 버린다. 중앙값 < target 이면 targe..
2021.02.15 -
BOJ 11650. 좌표 정렬하기 (Python)
BOJ 11650. 좌표 정렬하기 https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 풀이 BOJ 1181 과 같은 방법으로 파이썬의 내장함수 sort()에 key 파라미터를 (첫번째 기준, 두번째 기준)의 튜플로 넘겨주어 정렬한다. 소스코드 import sys locations = [] N = int(input()) for _ in range(N): (x, y) = map(int, sys.st..
2021.02.15 -
BOJ 10814. 나이순 정렬 (Python)
BOJ 10814. 나이순 정렬 https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 풀이 BOJ.1181 단어정렬 처럼 파이썬의 내장함수의 sort()를 이용하면 쉽게 풀 수 있다. for i in range(N): tmp = sys.stdin.readline().split() tmp.append(i) member.append(tmp) 정렬할때 먼저 가입한 순서가 두번째 기준이 되기 때문에 입력 시에 세번째 원소에 순서도 append해준다. 그렇게 되면..
2021.02.10 -
BOJ 2609. 최대공약수와 최소공배수 (Python)
BOJ 2609. 최대공약수와 최소공배수 https://www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 풀이1) 유클리드 호제법 쓴 풀이 gcd (great common divisor) 유클리드 호제법: X를 Y로 나눈 나머지 값을 R이라고 했을 때, X와 Y의 최대공약수는 Y와 R의 최대공약수와 같다. 나머지가 0이 될 때 까지 Y와 R의 나머지 연산을 하면 된다. 문제의 예제로 나와있는 24, 18을 예로 들자면 24 % 18 = 6 18 % 6 = 0 이렇게되면 Y값 자리에 있는 6이 최대공약수가 된다. 이것을 소스코드..
2021.02.10 -
BOJ 1181. 단어 정렬 (Python)
BOJ 1181. 단어 정렬 https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 풀이 파이썬의 내장함수 sorted()나 sort()를 사용하면 된다. 둘의 차이점은, sorted() : 정렬한것을 리턴한다. sort() : 원본이 정렬 된 것으로 바뀐다. None을 리턴한다. 주목 할 만한 문법은 key와 reverse 파라미터의 사용이겠다. key : 정렬 기준 정해줌 reverse : default는 True이며, True는 오름차..
2021.02.10