728x90

알고리즘 공부(C++) 83

10994 별 찍기 - 19 (파이썬/재귀)

10994번: 별 찍기 - 19 (acmicpc.net) 10994번: 별 찍기 - 19 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. www.acmicpc.net 이 문제는 계속 도전만 하고 풀지를 못했던 문젠데 다시 트라이해봤다.. def add_star(ptn): return "* " + ptn + " *" def star(n): if n == 1: return ["*"] else: return ['*' * (1 + 4 * (n - 1)), '*'+' ' * (4 * (n - 1) - 1)+'*']\ +list(map(add_star, star(n - 1)))\ +['*'+' ' * (4 * (n - 1) - 1)+'*', '*' * (1 + 4 * (n - 1))] print(star(int..

1969 DNA (파이썬 / 브루트포스)

1969번: DNA (acmicpc.net) 1969번: DNA DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오 www.acmicpc.net 브루트포스문제.. N, M = map(int, input().split()) lst = [] result = [] res = 0 acgt = [0 for i in range(26)] #A,C,G,T for i in range(N): lst.append(input()) for i in range(M): for j in range(N): acgt[ord(lst[j][i]) - ..

백준 1021 회전하는 큐 (파이썬 / 자료구조)

1021번: 회전하는 큐 (acmicpc.net) 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net from collections import deque result = 0 N, M = map(int, input().split()) deq = deque(i for i in range(1, N + 1)) lst = list(map(int, input().split())) for i in range(M): if deq.index(lst[i]) < len(deq) / 2: while (deq[0] != lst[i..

백준 1735 분수 합 파이썬

1735번: 분수 합 (acmicpc.net) 1735번: 분수 합 첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다. www.acmicpc.net 유클리드 호제법이라는 것이 있다. 앞서 말한 최대공약수 공식보다도 시간초과가 덜 되는 코드이다. a 를 b로 나눈 나머지가 0이 아닐 때마다 나누는 수를 갱신하고 a를 b로, b를 나누는수로 갱신하면서 마지막에 b를 출력하면 최대공약수가 된다. import sys input = sys.stdin.readline def gcd(a, b): while a % b != 0: mod = a % b a = b b = mod return b a, b = map(int, input..

백준 17609 회문 (파이썬 / 문자열)

17609번: 회문 (acmicpc.net) 17609번: 회문 각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다. www.acmicpc.net 골드5문제였다..... 처음에는 쉬운 줄 알았다. 바로 통과 아니야? 했다.. 하지만 우여곡절이 정말 많았다. from collections import deque T = int(input()) for i in range(T): str = deque(input()) stat = 0 while str: if str[0] != str[len(str) - 1]: if str[1] == str[len(str) - 1]: str.popleft() elif s..

17413 단어 뒤집기2 (파이썬 / 문자열)

17413번: 단어 뒤집기 2 (acmicpc.net) 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 로 감싸진 단어는 그대로 출력하고 그렇지 않은 단어는 공백으로 구분되며 거꾸로 출력되어야 한다는 문제였다.. 오래 걸릴 줄은 몰랐는데 내 정신이 나가있어서 그런지 엄청 오래걸림.. 첫 접근: for문으로 문자열을 계속 훑다가 기호가 아닐 때만 바꾸는 연산하자 -> 어디부터 어ㄷㅣ까지를 인덱스로 잡을지가 애매했음 해결책:처음에 split으로 1차 나누기를 하고 그 나누기한 것들을..

백준 1003 피보나치 함수 (다이나믹 프로그래밍 / 파이썬)

1003번: 피보나치 함수 (acmicpc.net) 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net import sys T = int(sys.stdin.readline()) lst = [0, 0] def fibbonacci(lst, n): if n == 0: lst[0] +=1 return 0 elif n == 1: lst[1] += 1 return 1 else: return fibbonacci(lst, n - 1) + fibbonacci(lst, n - 2) for i in range(T): fibbonacci(lst, int(sys.stdin.readline())) print(lst[0], lst[1]..

백준 15663 N과 M(9) 백트래킹 파이썬

15663번: N과 M (9) (acmicpc.net) 15663번: N과 M (9) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net N,M시리즈를 계속 풀어 오다가 드디어 실버 2에 도달한 첫 문제였다.. 앞 문제들은 다 정답률이 상당히 높았는데 이 문제부터 40퍼 대에 그쳤다. 그래서 조금 두려웠는데 시간이 더 오래 걸리긴 했지만 중요한 지점을 생각하면 정답을 도출해낼 수 있었다. 우선 출력 형식을 봐야 한다. 중복하는 수를 받을 수 있는데 똑같은 리스트가 나올 경우 한 번만 출력하고, 리스트 요소 개수가 2 이상일 경우에는 중복되는 ..

백준 20291 파일 정리 (파이썬) 문자열

20291번: 파일 정리 (acmicpc.net) 20291번: 파일 정리 친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를 www.acmicpc.net import sys input = sys.stdin.readline N = int(input()) lst = {} for i in range(N): file = input().strip() tmp = file[file.find('.') + 1:] if tmp in lst: lst[tmp] += 1 else: lst.setdefault(tmp, 1) lst2 = sorted(lst.items()) for i in lst2:..

백준 11663 선분 위의 점(파이썬) 이분 탐색

11663번: 선분 위의 점 (acmicpc.net) 11663번: 선분 위의 점 첫째 줄에 점의 개수 N과 선분의 개수 M이 주어진다. (1 ≤ N, M ≤ 100,000) 둘째 줄에는 점의 좌표가 주어진다. 두 점이 같은 좌표를 가지는 경우는 없다. 셋째 줄부터 M개의 줄에는 선분의 시작점과 www.acmicpc.net 이분 탐색 문제이다. 처음에는.. 아 for문 돌리면서 풀어야할텐데 이걸 어떻게 이분탐색으로 풀지? 고민이 많았는데 어차피 가장 큰값과 작은 값에 해당하는 인덱스를 알면 거기서 빼기만 하면 되니까 이분탐색이 되겠구나! 하는 접근방법으로 다가갔다. 그랬더니 정답은 나왔는데.... import sys N, M = map(int,input().split()) dots = list(map(i..

728x90