즐거운 PS 👩‍💻🥰 141

[백준-파이썬] 1463: 1로 만들기

문제 보러 가기! 아이디어 🌼 처음에는 DFS로 코드를 짰다. 2, 10 정도는 금방 답이 나왔지만... N의 범위가 10의 6제곱... 10000 정도만 해도 시간이 오래 걸렸다. 또 지금 생각해보니, 최대 재귀 깊이를 초과할 수 있겠다는 생각도 든다..! 다시 짠 코드 ! 3가지 종류의 계산이 있는데, 가능한 계산을 하고, 그 중에 가장 횟수가 적은 것을 dp에 넣는다! 코드 📝 N = int(input()) dp = [0, 0, 1, 1] + [0] * N # 0, 1번 인덱스는 편하게 쓰려고 추가. 2에서 1로 가는 최소 연산 수는 1, 3에서 1로 가는 최소 연산 수는 1개. for i in range(4, N + 1): # N을 구해야 하니까 그때까지 보기 if i % 6 == 0: # i가 ..

[백준-파이썬] 20164: 홀수 홀릭 호석

문제 보러 가기~~ 아이디어 🤩 몇 자리 숫자가 들어오는지에 따라서 다른 행동을 하라고 했다. 그래서 숫자(단, str 형식으로 입력받음)와 그때까지 더한 홀수의 합을 받아서, 특정한 행동을 하는 함수를 만들었다. 몇 자리인지에 따라서 다른 행동을 하고, 한 자리가 되어서 종료될 때까지 재귀로 계속 돌린다. 한 자리 -> 그때까지의 홀수의 개수를 리스트에 추가하고 리턴! (나중에 최대 홀수의 개수, 최소 홀수의 개수를 출력한다.) 두 자리 -> 그 수를 두 개로 나눠서 합을 구해서 새로운 수로 생각한다. (12면 1과 2로 나눈다. -> 1+2를 해서 3을 새로운 수로 생각하기) => 새로운 수, 그때까지 홀수의 합 + 이 새로운 수에 들어간 홀수의 개수를 인자로 주어서, 또 함수에 넣는다. 세 자리 이..

[백준-파이썬] 11067: 모노톤길

흑흑 ㅠㅠㅠㅠ 드디어 맞았습니다.!! 이 문제는 무슨 알고리즘을 써야할까? 이런 고민보다는.. 아 이거 맞겠지 ? ? 이러고 돌렸는데 자꾸 틀렸다..ㅠㅠ 그러다가 이 분의 포스팅을 보고 어디에서 문제가 있었는지 알게 되었다 !! 아.. 이걸 설명하기 전에 아이디어를 쓰겠다! 아이디어 ✨ '입구에서 출구 방향으로 걸어갈 때 동쪽에서 서쪽으로 이동을 전혀 하지 않아도, 즉, 보행자의 현재 위치를 나타내는 좌표의 x축 값이 작아지는 경우가 없이도 출구까지 도달할 수 있다. ' 라고 되어 있다 => 항상 왼쪽(x축이 작은 쪽)에서 오른쪽(x축이 큰 쪽)으로만 간다! X축은 항상 증가하는 쪽으로 가야 한다. 같은 X축에 여러 개의 카페가 있을 수도 있는데, 모두 방문해서 번호를 줘야 한다. 그래서 ..

[백준-파이썬] 14267: 회사 문화1

트리.. 몇 번 들어본 것 같기는 한데, 잘은 모르고 있었다. 이번에 싸피에서도 트리를 배웠는데, 마침 스터디 과제로도 이 문제가 있어서 반가웠다 ㅎㅎ 접근 🤔 맨 처음에는 한 명의 직속 상사가 여러 명의 직속 부하가 있는 걸 생각 못해서 틀렸다. 그 다음에는 칭찬을 받을 때마다 쭉 ~ 내려 보내서 시간 초과가 나왔다. (칭찬 받을 때마다, 그 칭찬받은 당사자를 루트 삼아서 쭉 트리를 순회하면서 직속 부하, 그 직속 부하, 그 직속 부하...에게 compliment 리스트에 칭찬의 수치를 더해줬다.) 그래서 일단은 칭찬이 입력될 때, 칭찬 받은 그 당사자만 칭찬을 받게 했다. (compliment 리스트에 더해서) 그 후에 트리를 1부터 전위 순회했다. 그러면서 직속 상사가 칭찬 받은 걸 더해서 받게 했..

[백준-파이썬] 2174: 로봇 시뮬레이션

문제 보러 가기! 아이디어 😍 뭔가 특별한 알고리즘을 쓰진 않은 것 같다. 다만 y축(column) 받을 때 인덱스가 좀 헷갈렸다.. (column 인덱스는 위에서 아래로 갈 때 0부터 수가 증가하는데, 문제에서는 아래에서 위로 갈 때 1부터 수가 증가하는 모양으로 입력이 들어온다.) 그것만 주의하면 괜찮을 것 같다 ! 코드 😆 import collections direction_move_index = {'W': (0, -1), 'S': (1, 0), 'E': (0, 1), 'N': (-1, 0)} r_direction = ['N', 'E', 'S', 'W'] # 오른쪽으로 l_direction = ['N', 'W', 'S', 'E'] # 왼쪽으로 def crash_wall(i, j): """ 범위 밖으..

[백준-파이썬] 2206: 벽 부수고 이동하기

문제 보러 가기~~ 아이디어 ✨ BFS인데 3차원 리스트를 활용해야 한다. 문제에서 3차원 리스트 쓰는 건 처음 해봤다 !! 일반적인 최단 거리 찾기에서 벽을 최대 한번 부술 수 있다는 조건이 추가되었다. 그래서 벽을 부수었는지 여부에 따라서 다른 2차원 리스트로 방문 체크를 해줬다. (즉 3차원 리스트를 만듦) 큐에 해당 인덱스, 벽을 부수었는지, 출발점부터 해당 위치까지의 거리를 넣어줬다. 큐 안에 요소가 있을 때, 하나씩 꺼내보면서 도착이면 그걸 따로 저장해줬고 그게 아니라면 4면을 돌아보면서 범위 이내인지 체크한다. 방문을 하지 않았고 벽인데, 아직 한번도 벽을 부수지 않았다면 벽을 부수고 거기로 간다. 방문을 하지 않았고 길이면, 벽을 부수지 않고 거기로 간다. '거기로 간다'라는..

[백준-파이썬] 1991: 트리 순회

문제 보러 가기! 트리 순회를 구현하는 문제! 숫자가 아니라 알파벳으로 들어와서, 그걸 숫자로 바꿔주는 것만 신경쓰면 될 것 같다! N = int(input()) # 노드의 개수 tree = list([0] * 2 for _ in range(N + 1)) # 왼쪽 자식, 오른쪽 자식 def pre_order(node): # 전위 순회 if node: print(chr(node+64), end='') # 할 일 pre_order(tree[node][0]) # 왼쪽 자식 pre_order(tree[node][1]) # 오른쪽 자식 def mid_order(node): # 중위 순회 if node: mid_order(tree[node][0]) # 왼쪽 자식 print(chr(node+64), end='') #..

[백준-파이썬] 1753: 최단 경로

문제 보러 가기! 아이디어 라고 할 것도 없는 것 같다. 다익스트라로 풀었다.. 다익스트라..는 전에도 들어는 봤지만, 딱히 공부하지는 않았었다. 이번 기회에 다익스트라를 공부할 수 있었다! 참고한 자료 안경잡이 개발자님의 글과 레드캐럿님의 벨로그 포스팅!!. 안경잡이 개발자님은 영상으로도 있어서, 다익스트라가 뭔지 이해하는 데 도움이 되었고, 레드캐럿님의 벨로그 포스팅은 파이썬 코드라서 코드 구현을 어떻게 해야 할지 알 수 있었다!! 또 플로이드워셜과의 차이점도 궁금했는데, 잘 설명해주셔서 좋았다 ㅎㅎ 코드 👩‍💻 import heapq import sys input = sys.stdin.readline V, E = map(int, input().split()) # 노드 개수, 간선 개수 start =..

[백준-파이썬] 22867: 종점

문제 보러 가기! 문제 🤔 버스가 종점에 들어온다. 종점에 와서는 정비를 해야 하기 때문에, 버스 정비 공간에 가야 한다. 버스가 종점에 들어오는 시각, 종점에서 나가는 시각이 주어진다. 버스 정비 공간이 최소로 몇 개 필요한지 계산하는 문제 즉, 한번에 종점에 버스가 최대 몇 개까지 있는지를 계산하는 문제이다! (단, 같은 시각에 종점에 들어오는 버스- 나가는 버스가 있으면 먼저 나간 후에 출발한다) 아이디어 😍 일단은 버스가 들어오고 나가는 시각이 복잡하게 들어오기 때문에(HH:MM:SS.sss) 편하게 바꿔줬다. 다행히도 들어오는 숫자의 자릿수는 늘 같으니까, 시각에 곱하기 천만 + 분에 곱하기 십만 + 초에 곱하기 천+ 밀리초는 그대로 받아왔다. 그러면 하나의 숫자가 되어서 다루기 편하다. 그리고..

728x90