Algorithm 179

[Python] SWEA 2814번 최장경로

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 노드 수 만큼 dfs탐색을 진행하여, 재귀를 진행한 횟수를 세면 깊이를 알 수 있다. 출발 노드에서 모든 노드로 각각 탐색을 진행하고, 탐색 중 깊이가 이전 깊이보다 깊을 때 마다, max_val의 값을 갱신한다. 재귀를 마친 후, 다시 탐색을 진행해야 하므로 방문 리스트의 값을 다시 해제 한 후, 모든 탐색을 마쳤다면 max_val의 값을 리턴 후, 형식에 맞게 출력한다. 코드 def dfs(now, cnt): global max_val if max_val < cnt: max_val = cnt visited[now] = True for i in ..

Algorithm/BFS&DFS 2023.05.15

[Python] SWEA 1216번 회문2

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 회문의 길이를 제일 큰 값(100)부터 1까지 돌리면서 회문인지 체크하고, 회문이라면 바로 출력하고 종료한다. 회문인지 검사하기 위해 가로 세로 값을 바꾼 새로운 리스트 선언하여 가로 회문 찾는 함수에 넣어 가로, 세로 순으로 된 두 배열 중 하나라도 회문이라면 회문길이 i를 형식에 맞게 출력한다. 출력 한 후, 종료 해야하므로 꼭 break한다, 코드 # 제일 긴 가로 회문 구하기 def get_longest_palindrome(word_len,array): for i in range(n_len): for j in range(n_len - wor..

[Python] SWEA 5215번 햄버거 다이어트

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 탐색하려는 최대 맛의 합을 전역변수로 놓고 dfs탐색을 진행하여, 인덱스 별 재료를 넣는 경우와, 넣지 않는 경우로 나눠서 탐색한다. dfs 탐색을 하면서, 최대 맛 값을 계산하기 위해 맛을 계산하는 임시 변수에 인덱스 별 맛 값을 더한 후, 그 값이 최대 맛 값을 저장해놓은 max_taste값보다 크다면 max_taste값을 갱신한다. 칼로리 값도 위와 같이 계산한 후, 재귀함수를 실행할 때 총 칼로리의 합이 제한 되어있는 칼로리 값보다 더 크다면 호출을 종료한다. 그 후 마지막인덱스까지 돌았다면 종료한다. 마지막 인덱스의 칼로리와 맛을 계산하면..

Algorithm/BFS&DFS 2023.05.13

[Python] SWEA 1860번 진기의 최고급 붕어빵

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 손님을 온 순서대로 오름차순 정렬한다. 손님이 온 시각까지 만들어진 붕어빵 개수는 (도착시간 // m) * k이다. 붕어빵을 만드는 데 소요되는 시간(M)으로 나눈 몫의 횟수만큼 붕어빵을 만들 수 있고, m초에 k개를 만들 수 있으므로, 나눈 몫에 k를 곱한다. 그 후 인당 한 개씩 붕어빵을 구매하므로 (i + 1)값을 빼 주면, 현 시각 붕어빵을 구매하고 남은 총 개수를 구할 수 있다. 계산된 붕어빵의 개수는 array[i]초에 1개를 구매하고 난 후의 붕어빵 개수이므로, 빵의 값이 0이아닌 음수일 때 구매할 수 없는 상태로 보고 결과를 impo..

Algorithm/Greedy 2023.05.12

[Python] SWEA 1220번 Magnetic

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 나의 풀이 위에 있는 자석이 1, 아래에 있는 자석이 2이므로 열이 아닌 행을 기준으로 탐색하면서 다른 극을 만나면 교착상태에 빠지는 횟수를 카운트 해준다. 위에있는 자석이 N극이므로, 제일 위에 있는 행에 S극이 있다면, 테이블 밖으로 떨어질 것이므로, 행을 탐색할 때 처음 값이 N극인 경우를 탐색해야한다. N극인 경우 flag값을 1로 바꾼 후, 같은 열의 다른 행에서 S극을 만났다면 교착상태로 카운트 하고, flag를 다시 0으로 바꿔준다. 위 과정을 반복한 후, 출력형식에 맞게 교착상태로 카운트 된 횟수를 출력한다. 코드 for tc in range(..

[Python] SWEA 1215번 회문1

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 (함수사용) 회문을 탐색하는 함수를 만들어 가로 회문을 탐색한다. 행기준으로 문자리스트를 다시 생성하여 회문 탐색한다. 가로와 세로 기준 회문 개수 더해서 형식에 맞게 출력한다. 코드 # 가로 회문찾기 def find_width_palindrome(word_list): cnt = 0 for i in range(8): for j in range(8 - word_len + 1): word = word_list[i][j:j+word_len] if word == word[::-1]: cnt += 1 return cnt for tc in range(10):..

[Python] SWEA 2805번 농작물 수확하기

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 마름모 형태로 덧셈을 진행해나가기 위해 먼저 길이의 중간값을 구한다. 마름모의 모양은 대칭형태 이므로, 중간값까지 for문을 돌면서 현재 행의 더해줘야 하는 값들과 대칭되는 행의 값들을 같이 더해나간다. 열의 값은 가운데 위치에서 for문 내 i값 만큼 빼고 더한 값을 구해 그 범위만큼 연산한다. 위 연산 수행 중 중간값이 두 번 더해졌으므로, 모든 값들을 더한 값에서 가운데 행의 모든 값들을 더한 값을 빼준 후, 형식에 맞게 출력한다. 코드 t = int(input()) for tc in range(t): n = int(input()) array..

[Python] 백준 2812번 크게 만들기

문제 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ K < N ≤ 500,000) 둘째 줄에 N자리 숫자가 주어진다. 이 수는 0으로 시작하지 않는다. 출력 입력으로 주어진 숫자에서 K개를 지웠을 때 얻을 수 있는 가장 큰 수를 출력한다. 입력 예제 4 2 1924 7 3 1231234 출력 예제 94 3234 문제 풀이 수를 가장 크게 만드려면 맨 왼쪽에 가장 큰 수가 와야하고, 배열을 사용하여 각 값에 접근하고 지우면 시간 초과가 날 수 있으므로 스택을 사용하여 해결한다. 숫자를 문자열 리스트로 저장한 후, 하나씩 꺼내보면서, stac..

[Python] SWEA 1873번 상호의 배틀필드

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 이동하기 편하도록 전차의 방향, 이동 방향, 이동하는 방향에 따른 좌표들을 저장한다. 전차가 있는 곳이 시작하는 위치이므로, 시작위치와 전차의 방향을 구한다. 그 후, 크게 포탄을 발사하는 경우와, 포탄을 발사하지 않고, 이동하는 두 가지 경우로 나눈 후, 포탄을 발사하는 경우, 벽돌과 강철에 부딪히는 경우 처리 해준다. 벽돌에 부딪히는 경우 벽돌 부분을 평지로 바꾼 후, break 해줘야 하고, 강철에 부딪히는 경우 아무런 일도 일어나지 않으므로, 그냥 break 해 줘야 한다. 포탄을 발사하지 않는 경우는 이동 방향에 따라 이동한 후, 이동을 ..