개발 공부 기록

나는 무엇을 하는가?

전체 글 55

[백준 14719번] 빗물 - 파이썬

https://www.acmicpc.net/problem/14719  💡문제 분석 요약2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다.비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까?💡알고리즘 설계 1. 첫번째 블록과 마지막 블록을 제외하고 모든 블록을 하나씩 검사한다.2. 해당 블록을 기준으로 왼쪽에서 가장 높은 블록과 오른쪽에서 가장 높은 블록의 높이를 구한다.3. 그 두 블록 중 낮은 블록의 높이가 현재 블록의 높이보다 높다면, 그 블록에서 현재 블록의 높이를 뺀 값을 빗물의 총량에 더한다💡코드H, W= map(int,input().split())block = list(map(int,input().split()))count=0for i in range(1, W-1)..

[백준 2156] 포도주 시식 - 파이썬

https://www.acmicpc.net/problem/2156💡문제 분석 요약효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규칙이 있다.포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다.연속으로 놓여 있는 3잔을 모두 마실 수는 없다.효주는 될 수 있는 대로 많은 양의 포도주를 맛보기 위해서 어떤 포도주 잔을 선택해야 할지 고민하고 있다. 1부터 n까지의 번호가 붙어 있는 n개의 포도주 잔이 순서대로 테이블 위에 놓여 있고, 각 포도주 잔에 들어있는 포도주의 양이 주어졌을 때, 효주를 도와 가장 많은..

[백준 18111번] 마인크래프트 - 파이썬

https://www.acmicpc.net/problem/18111💡문제 분석 요약  팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 땅을 파거나 집을 지을 수 있는 게임이다.목재를 충분히 모은 lvalue는 집을 짓기로 하였다. 하지만 고르지 않은 땅에는 집을 지을 수 없기 때문에 땅의 높이를 모두 동일하게 만드는 ‘땅 고르기’ 작업을 해야 한다.lvalue는 세로 N, 가로 M 크기의 집터를 골랐다. 집터 맨 왼쪽 위의 좌표는 (0, 0)이다. 우리의 목적은 이 집터 내의 땅의 높이를 일정하게 바꾸는 것이다. 우리는 다음과 같은 두 종류의 작업을 할 수 있다..

[백준 1124번] 언더프라임 - 파이썬

https://www.acmicpc.net/problem/1697💡문제 분석 요약자연수 X를 소인수분해하면, 곱해서 X가 되는 소수의 목록을 얻을 수 있다. 예를 들어, 12 = 2 × 2 × 3이다. 1은 소수가 아니다.어떤 수 X를 소인수분해 해서 구한 소수의 목록의 길이가 소수이면, 그 수를 언더프라임 이라고 한다. 12는 목록에 포함된 소수의 개수가 3개이고, 3은 소수이니 12는 언더프라임이다.두 정수 A와 B가 주어졌을 때, A보다 크거나 같고, B보다 작거나 같은 정수 중에서 언더프라임인 것의 개수를 구해보자.💡알고리즘 설계2부터 B+1 까지, 해당 숫자가 소수인지와 소수의 목록 길이를 배열에 저장한다.만약 이 소수의 목록 길이가 소수일 경우, answer에 1을 더한다.마지막에 answ..

[백준 11501번] 주식 - 파이썬

https://www.acmicpc.net/problem/11501 💡문제 분석 요약홍준이는 요즘 주식에 빠져있다. 그는 미래를 내다보는 눈이 뛰어나, 날 별로 주가를 예상하고 언제나 그게 맞아떨어진다. 매일 그는 아래 세 가지 중 한 행동을 한다.주식 하나를 산다.원하는 만큼 가지고 있는 주식을 판다.아무것도 안한다.홍준이는 미래를 예상하는 뛰어난 안목을 가졌지만, 어떻게 해야 자신이 최대 이익을 얻을 수 있는지 모른다. 따라서 당신에게 날 별로 주식의 가격을 알려주었을 때, 최대 이익이 얼마나 되는지 계산을 해달라고 부탁했다.예를 들어 날 수가 3일이고 날 별로 주가가 10, 7, 6일 때, 주가가 계속 감소하므로 최대 이익은 0이 된다. 그러나 만약 날 별로 주가가 3, 5, 9일 때는 처음 두 ..

[백준 1325번] 효율적인 해킹 - 파이썬

https://www.acmicpc.net/problem/1325💡문제 분석 요약해커 김지민은 잘 알려진 어느 회사를 해킹하려고 한다. 이 회사는 N개의 컴퓨터로 이루어져 있다. 김지민은 귀찮기 때문에, 한 번의 해킹으로 여러 개의 컴퓨터를 해킹 할 수 있는 컴퓨터를 해킹하려고 한다.이 회사의 컴퓨터는 신뢰하는 관계와, 신뢰하지 않는 관계로 이루어져 있는데, A가 B를 신뢰하는 경우에는 B를 해킹하면, A도 해킹할 수 있다는 소리다.이 회사의 컴퓨터의 신뢰하는 관계가 주어졌을 때, 한 번에 가장 많은 컴퓨터를 해킹할 수 있는 컴퓨터의 번호를 출력하는 프로그램을 작성하시오. 💡알고리즘 설계큐를 이용한 BFS로 구현했다. 1. 한 컴퓨터가 해킹할 수 있는 컴퓨터의 리스트를 저장한다.2. 모든 컴퓨터에서 ..

[백준 2002번] 추월 - 파이썬

https://www.acmicpc.net/problem/2002 💡문제 분석 요약터널에 들어가는 차의 순서와 터널에서 나오는 차의 순서를 알 때, 터널 안에서 추월한 차의 수를 구하여라. 💡알고리즘 설계1. 터널에 들어가는 차 번호와 그 순서를 해시로 저장한다.2. 터널에서 나오는 차 마다, 그 차보다 늦게 나오는 차와 들어갈 때 순서를 비교하여 자신 뒤에 자신보다 빨리 들어간 차가 있으면 추월 횟수를 1 늘린다. 💡코드import sysinput = sys.stdin.readlineN=int(input())in_order={}for i in range(N): car=input().rstrip() in_order[car]=iout_list=[]for i in range(N): ca..

[백준 11889번] 컴백홈 - 파이썬

https://www.acmicpc.net/problem/1189💡문제 분석 요약한수는 캠프를 마치고 집에 돌아가려 한다. 한수는 현재 왼쪽 아래점에 있고 집은 오른쪽 위에 있다. 그리고 한수는 집에 돌아가는 방법이 다양하다. 단, 한수는 똑똑하여 한번 지나친 곳을 다시 방문하지는 않는다.      cdef  ...f  ..ef  ..gh  cdeh  cdej  ...f       bT..  .T.e  .Td.  .Tfe  bTfg  bTfi  .Tde       a...  abcd  abc.  abcd  a...  a.gh  abc. 거리 :  6     6     6     8     8    10    6위 예제는 한수가 집에 돌아갈 수 있는 모든 경우를 나타낸 것이다. T로 표시된 부분은 가지 ..

[백준 1783번] 병든 나이트 - 파이썬

https://www.acmicpc.net/problem/1783💡문제 분석 요약병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.2칸 위로, 1칸 오른쪽1칸 위로, 2칸 오른쪽1칸 아래로, 2칸 오른쪽2칸 아래로, 1칸 오른쪽병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.💡알고리..

[백준 14503번] 로봇 청소기 - 파이썬

https://www.acmicpc.net/problem/14503💡문제 분석 요약현재 칸이 아직 청소되지 않은 경우, 현재 칸을 청소한다.현재 칸의 주변 4칸 중 청소되지 않은 빈 칸이 없는 경우,바라보는 방향을 유지한 채로 한 칸 후진할 수 있다면 한 칸 후진하고 1번으로 돌아간다.바라보는 방향의 뒤쪽 칸이 벽이라 후진할 수 없다면 작동을 멈춘다.현재 칸의 주변 4칸 중 청소되지 않은 빈 칸이 있는 경우,반시계 방향으로 90도 회전한다.바라보는 방향을 기준으로 앞쪽 칸이 청소되지 않은 빈 칸인 경우 한 칸 전진한다.1번으로 돌아간다. 💡알고리즘 설계1. while True로, 더 이동할 공간이 없을 때 까지 반복한다.2. 현재 칸이 0 인 경우, -1로 바꾼다.3. 주변의 4 칸을 반시계 방향으로..