백준 251

[백준, 파이썬, 1075번] 나누기

풀이 단순히 n으로 받아오는 값에서 뒤 두 수를 00으로 변환한 뒤 뒤에서 세 번째 자리의 값이 바뀌기 전까지 수를 1 증가 한 값이 f로 나누어 떨어지면 뒤 두 수를 출력하면 되는 문제이기에 아래와 같이 해결 import sys input = sys.stdin.readline n,f = input().rstrip('\n'),int(input().rstrip('\n')) for i in range(int(n[:-2]+'00'),int(n[:-2]+'99')+2): if not i%f: print(str(i)[-2:]) break

알고리즘 2023.10.09

[백준, 파이썬, 3273번] 두 수의 합

풀이 처음 접근한 방법은 조합을 활용한 방법으로 아래 메모리 초과 코드로서 문제가 의도한 접근 방법이 아니였다.. 이후 접근한 다른 방법으로는 아래 시간 초과 코드 li를 오름차순 정렬 후 2중 for 문을 활용해서 이전 값과는 비교하지 않는 형식으로 시간과 메모리를 줄여봤지만 여전히 시간초과... 그래서 마지막으로 해당 시간을 줄이기 위해 이분 탐색을 적용해서 풀어본 결과 무사히 제출이 되었다. 이분 탐색 코드는 거의 똑같다고 보면 되기에 설명은 생략함. 정답 코드 import sys input = sys.stdin.readline n = int(input()) li = sorted(list(map(int,input().rstrip('\n').split()))) x = int(input()) resul..

알고리즘 2023.10.07

[백준, 파이썬, 10610번] 30

풀이 해당 문제를 처음 접했을 때 순열로 해서 현재 n으로 받은 숫자의 모든 숫자를 조합해서 30의 배수가 되는지 확인해보는 것으로 이해했기에 분명히 메모리랑, 시간이 부족할 것 같은데 우선은 그렇게 적용하여 제출했지만 역시나 메모리 초과... (아래 두 번째 코드) 그래서 뭐 어쩌라는거지 싶어서 그냥 만들 수 있는 가장 큰 수가 30으로 나누어 떨어지는지 해보니까 됨... 어이... 핳 정답 코드 import sys input = sys.stdin.readline n = sorted(list(input().rstrip('\n')),reverse=True) if '0' in n: result = '' for i in n: result += i print(-1) if int(result)%30 else p..

알고리즘 2023.10.04

[백준, 파이썬, 9655번] 돌 게임

풀이 처음 접근은 6,3,2,1 형식으로 가져갈 수 있는 최대 돌 개수를 서로 가져가기, 혼자 가져가기 식으로 하여 문제를 해결하려 했지만 오답으로 나오게 되어 단순히 생각해본 결과 현재 SK가 시작하는 시점인 돌 1개에서 CY가 이길 수 있는 방법은 +1,+3,+5,+7 ... 식으로 홀 수개가 되었을 때 가 되며 SK가 이길 수 있는 방법은 0, +2, +4, +6 ... 식으로 짝수가 되었을 때이기에 아래와 같은 간단한 식으로 문제를 해결할 수 있었다. N = int(input()) if N % 2: print("SK") else: print("CY")

알고리즘 2023.10.03

[백준, 파이썬, 1244번] 스위치 켜고 끄기

풀이 분명 출력은 잘 되는데 4%에서 계속 에러가 발생해서 이것저것 찾다보니 ... 출력에 20줄이 넘어가게 되면 다음 행에서 출력하도록 적혀있어서 틀리게 되었던 것으로 역시 끝까지 문제를 잘 읽어야겠다는 생각을 다시 하게 되었다는 ...ㅎ 해당 문제의 풀이 과정은 따로 뭐가 없었고 흠.. 남자의 경우엔 switch의 값이 배수인지 체크하기 위해서 범위를 1부터 n까지 체크 후 해당 값이 swich와 나눈 값이 0의 경우 해당 값에 따른 값 변경해주기 여자의 경우엔 우선 범위가 배열의 길이에 충족하는지 체크 후 값 또한 같다면 변경하기 이후 길이가 20이 넘어가는 범위를 정해둔 다음 그에따른 슬라이싱을 통해 출력하여 해결 import sys input = sys.stdin.readline n = int(..

알고리즘 2023.10.02

[백준, 파이썬, 1283번] 단축키 지정

풀이 띄워져 있는 단어가 들어올 수도 있기에 우선 split으로 구분하여 받은 다음 처음에는 띄워져 있는 문자의 가장 앞의 단어를 확인 후 _set에 추가 set 형에 추가한 이유는 list에 비해 해시값으로 찾아 찾는 속도가 빠르다고 했기에 적용 이후 문자열 포매팅을 활용하여 문자를 변경하고 만약 첫글자의 요소들이 다 추가가 되어 있는 경우엔 2중 for문을 활용하여 각각의 문자에 접근하도록 한 다음 추가 후 출력하여 해결 import sys input = sys.stdin.readline _set = set() for _ in range(int(input())): s = list(input().rstrip('\n').split(' ')) flag = False for i in range(len(s))..

알고리즘 2023.10.01

[백준, 파이썬, 14405번] 피카츄

풀이 try, except 문과 문자열 슬라이싱을 활용해서 pi,ka,chu 단어를 찾으면 del로 문자를 지우는 형식으로하여 문제 해결 지우지 못하는 경우를 대비하여 except에 break 문을 추가 import sys input = sys.stdin.readline s = list(input().rstrip('\n')) ln = len(s) cnt = 0 while cnt != ln: try: if s[0:3] == ['c','h','u']: del s[0:3] elif s[0:2] in [['p','i'],['k','a']]: del s[0:2] cnt +=1 except: break print('NO') if s else print('YES')

알고리즘 2023.10.01

[백준, 파이썬, 24444번] 알고리즘 수업 - 너비 우선 탐색 1

풀이 이전 게시글인 깊이 우선 탐색 1 의 방법에서 bfs로 바꾸는 것만 달라졌기에 간단하게 해결 import sys from collections import deque input = sys.stdin.readline n,m,r = map(int,input().split()) _dic = {i:[] for i in range(1,n+1)} visit = [0]*(n+1) cnt = 1 visit[r] = cnt for i in range(m): u,v = map(int,input().split()) _dic[u].append(v) _dic[v].append(u) for i in range(1,n): _dic[i].sort() q = deque([r]) while q: s = q.popleft() for..

알고리즘 2023.09.30