분류 전체보기
[python] 백준 - 1013. Contact
🤔문제 해결 정규표현식 정규표현식 문제인줄 모르고 열심히 풀었는데.... 하🤣 💥 match 를 쓰면 포함되어있는걸 찾기 때문에 fullmatch 를 써서 전체가 맞는 지 확인해줘야한다. match로도 맞는 구간이 나오기 때문에 답을 찾을 순 있지만 fullmatch가 있기 때문에 저걸로 찾으면 된다. 💻소스 코드 import re import sys input = sys.stdin.readline for tc in range(int(input())): p = re.compile('(100+1+|01)+') # 정규표현식 준비 m = p.fullmatch(input().strip()) # 매칭 print('YES') if m else print('NO') 📕문제 확인 출처: BACKJOON ONLINE ..
[python] 백준 - 1174. 줄어드는 숫자
🤔문제 해결 못풀다가 문제 유형에 백트래킹이 있길래 힌트를 얻어 백트래킹으로 구현해봤다. 아이디어는 현재 숫자의 끝자리보다 낮은 숫자들을 뒤에 추가하는 재귀함수를 만들었다. 현재 764이면 7640 => 끝 7641 => 76410 => 끝 7642 => 76420 => 76421 => 764210 => 끝 마지막에 sort만 해주면 빠른 시간 내에 모든 경우의 수를 순서대로 다 얻을 수 있다. 가끔 안풀리면 다른 사람의 코드를 참고하기 전에 유형으로 힌트를 얻어보자😀 💻소스 코드 N = int(input()) # 백트래킹을 이용한 문제 풀이 def bt(cur): answer.append(int(cur)) for j in range(0, int(cur[-1])): # 현재 숫자의 끝자리보다 낮은 숫자들..
[python] 백준 - 1148. 단어 만들기
🤔문제 해결 딕셔너리에 퍼즐의 각 알파벳을 키, 그 알파벳의 개수와 사용된 횟수의 딕셔너리를 벨류로 가진다. 퍼즐에 있는 알파벳으로 낱말을 만들 수 있다면 퍼즐에서 사용될 알파벳의 used_cnt 를 +1 해준다. 위와 같은 결과가 나오게 되고, used_cnt 가 가장 적은 값들, 가장 많은 값들을 알파벳 오름차순으로 출력해준다. 💻소스 코드 import pprint import sys input = sys.stdin.readline # 인풋 받아서 단어 or 퍼즐 따로 배열로 만드는 함수 (두번 반복할거 같아서 함수로 만듦) def input_func(arr, sign): arr = [] while True: input_value = input().strip() if input_value == sig..
[python] 백준 - 1105. 팔
🤔문제 해결 수가 20억이기 때문에 하나씩 하기에는 시간초과가 발생한다. 숫자의 범위가 주어지고, 8의 '최소' 개수를 구하라고 했다. 그러므로 각 자리수를 비교해보기로 했다. 먼저 자리수가 다른 경우에는 8의 최소 개수가 0이 된다. - 자리수가 다르면 각 자리의 수를 범위 내에서 아무거나 선택할 수 있기 때문에 자리수가 같은 경우 첫번째 자리부터 마지막으로 순차적으로 비교해본다. 각 자리가 서로 같은 8인 경우 최소 8 개수의 +1, 그리고 다음 자리 비교 각 자리가 서로 다른 경우 +0, 그리고 끝 - 뒤 자리의 숫자는 비교할 필요가 없다. 💻소스 코드 L, R = input().split() # 두 수의 자리수가 다른 경우 8이 들어가는 횟수는 최소 0이 나온다. answer = 0 if len(..
[python] 백준 - 13023. ABCDE
🤔문제 해결 문제는 이어져있는 친구가 4명인지 물어보는 것... ( 헷갈렸다 ) 기본적인 DFS 문제이다. 중간에 조건을 줘서 잘 멈춰주기만 한다면 시간초과는 해결될 것이다. 💻소스 코드 import sys def dfs(current, cnt): global answer if answer == 1: # 답을 이미 찾았다면 dfs 멈추기 return if cnt == 5: # 답 찾았을 때 (친구가 4명) answer = 1 return visited[current] = 1 for neighbor in adj[current]: if not visited[neighbor]: dfs(neighbor, cnt + 1) visited[current] = 0 input = sys.stdin.readline ans..
[python] 백준 - 2615. 오목
🤔문제 해결 6목은 안된다. 답을 출력할 때, 왼쪽 우선, 위쪽 우선 이므로 바둑돌을 기준으로 우상, 우, 우하, 하 이렇게 4방향만 고려해줬다. 먼저 바둑돌 하나를 선택하고 이 바둑돌이 끝에서 시작하는지 or 끝이 아니라면 내가 체크할 방향의 반대방향으로 상대 바둑돌이 없는지 육목 방지 위의 조건에 맞다면 내가 정한 방향으로 탐색하며 같은 색의 바둑돌을 계속 찾음 상대 바둑돌을 만나거나 바둑판 밖으로 나가면 내가 찾은 바둑돌의 개수를 체크 바둑돌을 4개 더 찾았으면 성공 아니면 실패 💻소스 코드 import sys input = sys.stdin.readline LENGTH = 19 board = [list(map(int, input().split(" "))) for _ in range(19)] # 우..