목록Python (288)
홍우진의 개발새발
문제 링크https://www.acmicpc.net/problem/1012풀이 코드def dfs(y, x): global visited visited[y][x] = 1 for i in range(4): newY = y + dirR[i] newX = x + dirC[i] if graph[newY][newX] and not visited[newY][newX]: dfs(newY, newX)import syssys.setrecursionlimit(10**6)input = sys.stdin.readlinemax = 50 + 10dirR = [1, -1, 0, 0]dirC = [0, 0, 1, -1]for _ in range(int(input..
문제 링크https://www.acmicpc.net/problem/1260풀이 코드import sysinput = sys.stdin.readlinedef dfs(idx): global visited visited[idx] = True # 방문도장 print(idx, end = ' ') # 한 줄로 출력 for i in range(1, n + 1): if not visited[i] and graph[idx][i]: # 방문하지 않았고, 그래프에 존재한다면 타고 들어가기 dfs(i)def bfs(): global q, visited while q: cur = q.pop(0) # 현재 위치 print(cur, ..
문제 링크https://www.acmicpc.net/problem/14729풀이 코드import sysinput = sys.stdin.readlinelab = []for i in range(int(input())): lab.append(float(input())) if len(lab) > 7: lab.remove(max(lab))for i in sorted(lab): print(f'{i:.3f}')코드 해석시간 초과 오류를 피하기 위해인원이 7명을 넘어갈 시 집어넣고 최댓값을 지우는 방식으로 메모리를 관리했다. 체감 난이도: ★☆☆☆☆시간 초과 오류만 빼면 오래간만에 쉬운 문제였다...
문제 링크https://www.acmicpc.net/problem/1015풀이 코드dap = [0] * int(input()) # 답을 저장할 배열 생성a = list(map(int,input().split()))sa = sorted(a) # 정렬해놓은 배열 생성for i in range(len(a)): idx = sa.index(a[i]) # 해당 숫자가 정렬돼있는 배열에서 몇번째에 위치했는지 가져오기 dap[i] = idx # 답에 추가 sa[idx] = False # 이미 사용한 숫자는 다시 안뽑히도록 제거print(*dap)코드 해석배열을 하나 더 만들어서 정렬해놓고비교하면서 답을 만든다고 생각하면 풀이하기가 쉽다. 체감 난이도: ★★☆☆☆생각보다 코드가 짧았다.생각보다 코드가 어렵지 않았..
문제 링크https://www.acmicpc.net/problem/1918풀이 코드dap = ''stack = []for i in input(): if i.isalpha(): # 알파벳인지 확인 후 알파벳이면 답에 추가 dap += i else: if i == '(': # 괄호가 열리면 스택을 쌓는다. stack.append(i) elif i == '*' or i == '/': # 만약 곱하기 혹은 나누기 (우선순위) 라면 while stack and (stack[-1] == '*' or stack[-1] == '/'): dap += stack.pop() # 만..
문제 링크https://www.acmicpc.net/problem/5525풀이 코드n = int(input())m = int(input())s = input()cnt = i = dap = 0while i 코드 해석그냥 인덱스 슬라이싱 해서 해결하니까 부분점수를 받았다.슬라이싱을 최소로 줄여서 풀었다. 현재 문자열이 IOI인지 확인하고 맞다면 N에서 주어진 수 만큼 IOI를 반복 확인하며 문자열을 확인한다.만약 N에서 주어진 수 만큼 IOI가 이어져 있다면 답에 1을 더하고 문자열 시작(i)을 한 칸 옮겨서 반복한다. 체감 난이도: ★★★☆☆
문제 링크https://www.acmicpc.net/problem/5397풀이 코드for _ in range(int(input())): L,R = [],[] key = input() for i in key: if i == "-": if L: L.pop() elif i == "": if R: L.append(R.pop()) else: L.append(i) L.extend(reversed(R)) print(''.join(L))코드 해석현재 위치(커서)를 기준으로 왼쪽, 오른쪽 배열을 만들어서 해결한다.- 가 입력되면 왼쪽 제일 뒤 글..
문제 링크https://www.acmicpc.net/problem/4779풀이 코드def cantor(n): if n == 1: return "-" else: a = cantor(n // 3) b = " " * (n // 3) return a + b + awhile 1: try: print(cantor(3 ** int(input()))) except: break코드 해석 cantor 함수 동작과정cantor(9) 호출(n=2)n이 1이 아니므로 else 실행a = cantor(9 // 3) → cantor(3)을 호출b = " " * (9 // 3) → b는 " " (공백 3개)가 됨cantor(3) 호출..