본문 바로가기

파이썬 알고리즘8

BOJ 9996번(한국이 그리울 땐 서버에 접속하지) 난이도 실버 III 풀이 정규 표현식을 이용해서 쉽게 해결할 수 있는 문제였다. import sys import re input=sys.stdin.readline N=int(input()) word=input().rstrip() start,end=word.split("*") pattern=re.compile(start+'.*'+end) for _ in range(N): file=input().rstrip() result=pattern.fullmatch(file) if result: print("DA") else: print("NE") 링크 https://www.acmicpc.net/problem/9996 9996번: 한국이 그리울 땐 서버에 접속하지 총 N개의 줄에 걸쳐서, 입력으로 주어진 i번째 파일 .. 2023. 3. 31.
BOJ 2580번(스도쿠) 난이도 골드 IV 풀이 DFS와 백트래킹을 이용해서 해결하는 문제였다. import sys input=sys.stdin.readline graph=[list(map(int,input().split())) for _ in range(9)] zero=[] for i in range(9): for j in range(9): if graph[i][j]==0: zero.append([i,j]) def checkHeight(n,x): for idx in range(9): if graph[idx][n]==x: return False return True def checkWidth(n,x): for idx in range(9): if graph[n][idx]==x: return False return True def .. 2023. 3. 30.
BOJ 2023번 - 신기한 소수 난이도 골드 V 풀이 import sys input=sys.stdin.readline N=int(input()) def isPrime(n): if n 2023. 3. 5.
BOJ 1913번 - 달팽이 난이도 실버 III 풀이 구현 문제이다. 주어진 표에 달팽이 모양으로 숫자를 채워야 하는데 이 로직을 생각하는데 좀 어려웠다. dx와 dy 배열을 두어서 그래프 좌표를 이동하도록 두고, 방향을 바꿔주는 것은 그래프의 범위를 넘어갈때 4를 나눠서 나머지를 통해서 dx,dy를 한칸씩 이동하도록 구현해주었다. import sys input = sys.stdin.readline N=int(input()) num=int(input()) snail=[[0]*N for _ in range(N)] x,y=0,0 target_x,target_y=0,0 direction=0 dx=[1,0,-1,0] dy=[0,1,0,-1] cnt=N**2 snail[x][y]=cnt cnt-=1 while cnt>0: nx=x+dx[di.. 2023. 3. 5.
BOJ 17478번 - 재귀함수가 뭔가요? - 자바, 파이썬 난이도 실버 V 풀이 재귀함수에 대해서 연습할 수 있는 문제였다. 반복되는 부분을 찾아낸 다음에 재귀함수를 이용해서 반복적으로 출력될 수 있도록 코드를 구현해줬다. "재귀함수가 뭔가요?" "잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어. 마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지. 그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어." 라고 답변하였지. 크게 위의 부분이 반복되었고 반복 횟수마다 앞에 '____'이 달라지므로 이를 적절하게 출력되도록 구현하였다. 파이썬 풀이 import sys input=sys.stdin.readline N=int(input()) print('어느 한 컴퓨터공.. 2023. 3. 5.
BOJ 2671번 - 잠수함식별 난이도 골드 V 풀이 정규식을 사용하면 좀더 쉽게 풀 수 있는 문제였다. 검색을 해보니까 DFA(Deterministic Finite Automata)라는 개념을 활용해서 풀 수 있는거 같긴한데 너무 어려운거 같아서 정규식을 사용해서 해결하는 것이 간단할 것이라고 생각했다. 정규 표현식 정리 Groups and ranges [ ] : 괄호안의 어떤 문자든 -> [ABC] : A 또는 B 또는 C ( ) : 그룹 | : 또는 Quantifiers ? : 없거나 있거나 -> BA? : B or BA * : 없거나 있거나 많거나 + : 하나 또는 많이 {n} : n번 반복 {min,} : 최소 {min,max} : 최소 그리고 최대 Character classes . : 어떤 글자 re.compile : 정규.. 2023. 2. 12.
BOJ 13417번 - 카드 문자열 난이도 실버 III 풀이 전형적인 그리디 유형의 문제였다. 일단 배열을 하나 만들어놓고 첫번째 원소를 넣은 다음 반복문을 돌려 배열의 첫번째 인덱스 값과 나머지 원소들을 비교해서 사전순으로 느리면 뒤에 넣고 사전순으로 빠르면 앞에 넣는 방식으로 구현했다. 파이썬 코드 import sys input=sys.stdin.readline T=int(input()) for _ in range(T): N=int(input()) answer=[] card=input().rstrip().split(" ") answer.append(card[0]) for i in range(1,len(card)): if answer[0] 2023. 2. 12.
BOJ 9742번 - 순열 (파이썬) 문제 집합의 순열이란 집합의 서로 다른 원소를 모두 사용해 만들 수 있는 순서이다. 예를 들어, {2,3,5}의 순열은 다음과 같다. 2 3 5 2 5 3 3 2 5 3 5 2 5 2 3 5 3 2 각각의 순열은 숫자로 나타낼 수 있다. 위의 순열은 사전순으로 쓰여져 있으며, 등장하는 순서를 이용해 나타낸다. 즉, 3 5 2는 위치 4에 있고, 5 3 2는 마지막 위치인 6에 있다. {b,e,i,n}으로 만들 수 있는 순열은 다음과 같다. b e i n b e n i b i e n b i n e b n e i b n i e e b i n e b n i e i b n e i n b e n b i e n i b i b e n i b n e i e b n i e n b i n b e i n e b n b e .. 2023. 1. 30.