[백준, 파이썬, 11656번] 접미사 배열 풀이 단순히 입력값의 길이를 반복문에 넣은 다음 주어지는 i의 값에 따라 문자열 s를 슬라이싱 한 값을 담은 배열을 정렬한 다음 해당 배열에 있는 값을 순서대로 출력하여 해결 import sys input = sys.stdin.readline s = input().rstrip('\n') for i in sorted([s[i:] for i in range(len(s))]): print(i) 알고리즘 2023.10.05
[백준, 파이썬, 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
[백준, 파이썬, 1037번] 약수 풀이 주어지는 값들이 모두 약수이기에 정렬을 한 다음 양 끝값을 곱하기만 하면 찾고자 하는 값이 나올 것이기에 간단하게 아래와 같이 작성하여 문제 해결 import sys input = sys.stdin.readline cnt = int(input()) li = sorted(list(map(int,input().rstrip('\n').split()))) print(li[0]*li[-1]) 알고리즘 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
[백준, 파이썬, 24479번] 알고리즘 수업 - 깊이 우선 탐색 1 풀이 문제 이해를 못했어서 조금 시간이 걸렸는데 분명 dfs로 해결은 했는데 뭐가 문제지 싶어서 계속 찾아본 결과 방문한 순서를 1~n번까지 순서대로 나열하는 문제라는 것을 알게 되었다. 아래 코드는 다른 dfs 코드와 비슷할 것이기에 풀이를 따로 작성할 것은 없지만 양방향으로 연결해야 하기에 아래와 같이 작성했으며 _dic[u].append(v) _dic[v].append(u) 오름차순으로 방문한다고 했기에 정렬을 하지만 dfs로 방문하기에 reverse=True를 사용해서 내림차순 정렬을 하여 역순으로 stack에 추가하면 오름차순이 되도록 해주기! import sys from collections import deque input = sys.stdin.readline n,m,r = map(int,i.. 알고리즘 2023.09.30
[백준, 파이썬, 1284번] 집 주소 풀이 명절이기에 간단하게 하나만 끄적거리려 푼 문제 단순히 1의 경우 +2 0의 경우 +4 나머지는 +3 이후 누적값 + 숫자의 개수 -1 + 2(좌우 여백) 하면 문제 해결! import sys input = sys.stdin.readline while True: n = input().rstrip('\n') cnt = 0 if n == '0': break else: for i in n: if i == '1': cnt += 2 elif i == '0': cnt += 4 else: cnt += 3 print(cnt + len(n)-1 + 2) 알고리즘 2023.09.29