전체 글 270

백준 2153번 소수 단어 파이썬

https://www.acmicpc.net/problem/2153 2153번: 소수 단어 소수란 1과 자기 자신으로만 나누어떨어지는 수를 말한다. 예를 들면 1, 2, 3, 5, 17, 101, 10007 등이 소수이다. 이 문제에서는 편의상 1도 소수로 하자. 알파벳 대소문자로 이루어진 영어 단어가 하나 www.acmicpc.net 내 답안 def is_prime(n): if n == 1: return True for i in range(2, int(n**0.5)+1): if n % i == 0: return False return True x = list(input()) cnt = 0 for i in x: if i.isupper(): cnt += (ord(i) - 64) else: cnt += (or..

BOJ/Python 2022.03.07

백준 2581번 소수 파이썬

https://www.acmicpc.net/problem/2581 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. www.acmicpc.net 내 답안 def is_prime(n): if n == 1: return False for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True M, N = int(input()) N = int(input()) lst = [] for i in range(M, N + 1): if is_prime(i): lst.append(i) if le..

BOJ/Python 2022.03.06

백준 3009번 네 번째 점 파이썬

https://www.acmicpc.net/problem/3009 3009번: 네 번째 점 세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오. www.acmicpc.net 내 답안 x = [] for i in range(3): a, b = map(int, input().split()) x.append([a, b]) print(x[0][0]^x[1][0]^x[2][0], x[0][1]^x[1][1]^x[2][1]) 난이도는 어떻게 풀어도 쉽겠지만 XOR을 기록하기 위해 작성 했다. 맨 마지막줄의 ^ 는 XOR 의 비트 연산자 이다. 배타적 논리합으로 문제를 해결하였다. 예를들어 5 ^ 5 ^ 7 은 0 ^ 7 로 나타 낼수 있고, 0 ^ 7 은 7..

BOJ/Python 2022.03.05

구현 (implementation) 실전 문제 - Python

예제 4 - 1 상하좌우 여행가 A는 NxN 크기의 정사각형 공간 위에 서 있다. 이 공간은 1x1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위 좌표는 (1, 1)이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당한다. 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)이다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여있다. 계획서에는 하나의 줄에 띄어쓰기를 기준으로하여 L, R, U, D 중 하나의 문자가 반복적으로 적혀 있다. 각 문자의 의미는 다음과 같다. L : 왼쪽으로 한 칸 이동 R : 오른쪽으로 한 칸 이동 U : 위로 한 칸 이동 D : 아래로 한 칸 이동 * 이때 여행가 A가 NxN 크기의 정사각형 공간을 벗어나는 움직임은 무시된..

Algorithm 2022.03.04

백준 2839번 설탕 배달 파이썬

https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 내 답안 N = int(input()) cnt = 0 while True: if (N % 5) == 0: cnt += (N // 5) print(cnt) break N -= 3 cnt += 1 if N < 0: print(-1) break 이 문제를 동적 프로그래밍으로 푸는 방법도 있다. 하지만 DP 공부를 덜 했기 때문에 내가 생각하는 알고리즘대로 코드를 짰다. N이 5의 배수가 되는 순간 나눠주게 된다면..

BOJ/Python 2022.03.03

구현 (implementation)

- 아이디어를 코드로 바꾸는 구현 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정을 구현이라고 한다. 흔히 문제 해결 분야에서 구현 유형의 문제는 '풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제'를 의미한다. 실제로 코딩 테스트에서 구현 문제를 보면 당황할 수 있다. 어떻게 풀면 될지 대략 감은 오는데, 막상 소스코드로 옮기려니 무엇부터 작성해야 할지 모를 수 있기 때문이다. 예를 들어 파이썬으로 코딩 테스트에 응시했는데, N 개의 원소가 들어 있는 리스트에서 R 개의 원소를 뽑아 한 줄로 세우는 모든 경우를 구해야 하는 문제를 만나면 어떻게 할까? 무작정 기능을 전부 작성할 수도 있다. 하지만 파이썬은 itertools 와 같은 표준 라이브러리로 쉽게 짜는 방법도 있다. 이는 언어의 문법을..

Algorithm 2022.03.03

그리디 알고리즘 ( Greedy Algorithm ) 실전 문제 1 - Python

동빈이의 큰수의 법칙 동빈이의 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M 번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K 번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 예를 들어 순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때 M이 8이고, K가 3이라고 가정하자. 이 경우 특정한 인덱스의 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5인 46이 된다. 배열의 크기 N, 숫자가 더해지는 횟수 M, 그리고 K가 주어질 때 동빈이의 큰 수의 법칙에 따른 결과를 출력하시오. 입력조건 첫째줄에 N (2

Algorithm 2022.03.02

그리디 알고리즘 ( Greedy Algorithm )

그리디 알고리즘( Greedy Algorithm ) 그리디 알고리즘은 단순하지만 강력한 문제 해결 방법이다. 단어 그대로 번역 하면 탐욕법 이고 단순 무식하게, 탐욕적으로 문제를 푸는 알고리즘 이다. 여기서 탐욕적 이라는 말은 현재 상황에서 지금 당장 좋은 것만 고르는 방법이다. 매 순간 가장 좋아 보이는 것을 선택하며 , 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 코딩 테스트 유형 그리디의 문제 유형은 사전에 외우고 있지 않아도 풀 수 있을 가능성이 높다. 최단 경로를 구하는 다익스트라 알고리즘은 그리디 알고리즘으로 분류 되므로 암기가 필요한 알고리즘 이다. 그리디 알고리즘 자체가 문제 출제의 폭이 매우 넓기 때문에 다익스트라 알고리즘과 같은 특이 케이스를 제외하고는 단순 암기를 통해..

Algorithm 2022.03.01

백준 24542번 튜터-튜티 관계의 수 파이썬

https://www.acmicpc.net/problem/24542 24542번: 튜터-튜티 관계의 수 첫째 줄에 튜터-튜티 관계를 정하는 경우의 수를 $1\,000\,000\,007$로 나눈 나머지를 출력한다. www.acmicpc.net 내 답안 import sys from collections import deque input = sys.stdin.readline N, M = map(int, input().split()) graph = [[] for _ in range(N + 1)] for _ in range(M): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) visited = [0] * (N + 1) def bfs(..

BOJ/Python 2022.02.28

백준 1075번 나누기 파이썬

https://www.acmicpc.net/problem/1075 1075번: 나누기 첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. F는 100보다 작거나 같은 자연수이다. www.acmicpc.net 내 답안 N = int(input()) F = int(input()) nature = N lst = [] while (str(N)[-2:] != '00'): N -= 1 if N%F == 0: lst.append(str(N)[-2:]) if len(lst) > 0: print(min(lst)) else: for i in range(nature, 20000000001): if i % F == 0: print(str(i)[-2:]..

BOJ/Python 2022.02.27
반응형
목차(index)