본문 바로가기

알고리즘65

[BOJ] 1541. 잃어버린 괄호 문제https://www.acmicpc.net/problem/1541괄호를 적절히 쳐서 주어진 식의 값을 최소로 만들기‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자55-50+40# 55-(50+40) = -35 주요 아이디어'-' 기준으로 식을 split하기'+' 연산자 처리 후 split된 단위로 '-' 처리ex. 70+20-30-40list[0] = 70+20 = 90list[1] = 30list[2] = 40answer = 90 - 30 - 40 = 20 코드 구현 (Python 3)더보기 op_str = input()num_list = op_str.split('-')for idx, num in enumerate(num_list): num_tota.. 2024. 6. 25.
[BOJ] 7576. 토마토 문제https://www.acmicpc.net/problem/7576 M * N 칸으로 이뤄진 상자에 토마토가 존재정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마토가 들어있지 않은 칸 토마토가 모두 익을 때까지의 최소 날짜를 출력 저장될 때부터 모든 토마토가 익어있는 상태이면 0을 출력 토마토가 모두 익지는 못하는 상황이면 -1을 출력 6 4 # M*N0 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 1   주요 아이디어전형적인 BFS 문제익은 토마토를 시작 좌표로 삼고 큐에 모조리 넣어놓자bfs를 진행하면서 box에다 며칠차에 해당 칸이 익는지를 적지bfs 밖의 반복문에서는 최소 일수를 구하고, 만약 최종적으로 안 익은 게 있을 경우 -1로 반환0일.. 2024. 6. 25.
[BOJ] 16401. 과자 나눠주기 문제https://www.acmicpc.net/problem/16401M명의 조카가 있고 N개의 과자가 있을 때, 조카 1명에게 줄 수 있는 막대 과자의 최대 길이막대 과자는 길이와 상관없이 여러 조각으로 나눠질 수 있지만, 과자를 하나로 합칠 수는 없다첫째 줄에 조카 1명에게 줄 수 있는 막대 과자의 최대 길이를 출력한다.단, 모든 조카에게 같은 길이의 막대과자를 나눠줄 수 없다면, 0을 출력한다.  주요 아이디어과자 최대 길이를 이분탐색 target으로 두기target mid 값을 기준으로 나눠줄 수 있는 개수 구하기개수 모자랄 경우 최대 길이 줄이기개수 많을 경우 최대 길이 늘리기  코드 구현 (Python 3)더보기 """과자 최대 길이를 이분탐색 target으로 두기"""m, n = map(in.. 2024. 6. 25.
[BOJ] 18870. 좌표 압축 문제https://www.acmicpc.net/problem/18870처음에는 문제가 잘 이해가 안갔다문제 예시를 보면 이해가 잘됨2 4 -10 4 -9# 출력 : 2 3 0 3 1좌표를 오름차순 정렬한 후 인덱스를 반환해주면 된다!  주요 아이디어위에서 했던 문제 설명 그대로좌표를 오름차순 정렬한 후 인덱스를 반환  코드 구현 (Python 3)더보기 import sysn = int(input())coor = list(map(int,sys.stdin.readline().strip().split()))sorted_coor = sorted(list(set(coor)))for c in coor: print(sorted_coor.index(c), end=' ')  시간 초과... 실패 원인list.ind.. 2024. 6. 25.
[BOJ] 16954. 움직이는 미로 탈출 문제https://www.acmicpc.net/problem/16954시작 지점 -> 가장 왼쪽 아랫칸 | 목표 지점 -> 가장 오른쪽 윗칸캐릭터는 상하좌우 & 대각선 이동 가능 / 현재 위치 서있기벽이 움직여? - 1초마다 모든 벽이 아래 있는 행으로 한 칸씩 내려감 (가장 밑에서 사라짐)최종적으로 욱제 캐릭터가 목표 지점으로 이동할 수 있는지 없는지 여부 확인   주요 아이디어그래프 입력 받기while문 반복하면서 그래프 내의 벽 이동 (이동 함수 별도로 만들기)bfs 솔루션 실행하면서 목적지까지 도달 가능한지 확인하기캐릭터가 먼저 이동 -> 벽이 이동벽이 캐릭터와 닿으면 바로 0 반환최종적으로 도달 가능하면 1 반환하기  코드 구현 (Python 3)더보기 from collections import.. 2024. 6. 25.
[BOJ] 3190. 뱀 문제https://www.acmicpc.net/problem/3190n*n 정사각보드 위 시작 (1,1)처음에는 뱀 길이 1, 오른쪽 방향사과 있으면 -> 머리 늘리기, 꼬리 그대로사과 없으면 -> 꼬리 없애기종료 조건 : 벽이나 자기 자신의 몸 -> 전까지 몇 초 걸리나 체크  주요 아이디어(x,y) 좌표를 큐에 넣었다 빼는 방식으로 머리 append, 꼬리 없애기방향 전환이 들어가는 경우 {x초 : 방향} 형태로 저장하기한번 이동할 때마다 time + 1씩 해줘서 최종 출력  코드 구현 (Python 3)더보기 from collections import dequen = int(input())k = int(input())board = [[0] * n for _ in range(n)]# 오른쪽부터 시계방.. 2024. 6. 25.