Algorithm 179

[Python] 백준 1158번 요세푸스 문제

문제 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 입력 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) 출력 예제와 같이 요세푸스 순열을 출력한다. 입력 예제 7 3 출력 예제 문제 풀이 k - 1 번째 값까지 pop해서 큐의 뒤에 붙인다. 그 후, 맨 앞의 값이 k번째 값이므로, pop해서 answer에 붙인다. 위 과정 반복하여, answer에 요세푸스 순열 저장 후, 출력 형식 맞추기 위해, answer의 값들을 int가 아닌 문자로 바꾼다. 형식에 맞게 출력한다. 코드 from collections import deque n,k = map(..

[Python] 백준 1913번 달팽이

문제 1913번: 달팽이 N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 www.acmicpc.net 입력 첫째 줄에 홀수인 자연수 N(3 ≤ N ≤ 999)이 주어진다. 둘째 줄에는 위치를 찾고자 하는 N2 이하의 자연수가 하나 주어진다. 출력 N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 출력한다. 입력 예제 7 35 출력 예제 49 26 27 28 29 30 31 48 25 10 11 12 13 32 47..

[Python] 백준 17413번 단어 뒤집기2

문제 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 입력 첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다. 출력 첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다. 입력 예제 baekjoon online judge ef gh 출력 예제 noojkeab enilno egduj fe hg 문제 풀이 괄호를 만나는 경우와 문자나 숫자를 만나는 경우, 공백을 만나는 경우 세 가지로 나눠 탐색한다. 열린괄호()를 만날 때 까지 인덱스 증가시킨다. 닫힌 괄호를 만났다면..

[Python] 백준 1138번 한 줄로 서기

문제 1138번: 한 줄로 서기 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 www.acmicpc.net 입력 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 크거나 같고, N-i보다 작거나 같다. i는 0부터 시작한다. 출력 첫째 줄에 줄을 선 순서대로 키를 출력한다. 입력 예제 4 2 1 1 0 5 0 0 0 0 0 출력 예제 4 2 1 3 1 2 3 4 5 문제 풀이 이중 for문을 돌리면서, arr..

Algorithm/Greedy 2023.06.16

[Python] 백준 2615번 오목

문제 2615번: 오목 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호 www.acmicpc.net 입력 19줄에 각 줄마다 19개의 숫자로 표현되는데, 검은 바둑알은 1, 흰 바둑알은 2, 알이 놓이지 않는 자리는 0으로 표시되며, 숫자는 한 칸씩 띄어서 표시된다. 출력 첫줄에 검은색이 이겼을 경우에는 1을, 흰색이 이겼을 경우에는 2를, 아직 승부가 결정되지 않았을 경우에는 0을 출력한다. 검은색 또는 흰색이 이겼을 경우에는 둘째 줄에 연속된 다섯 개의 바둑알 중에서 가장 왼쪽에 있는 바둑알(연속된 다섯 개의 바둑알이 세로로 놓인 경우, 그 중 가장 ..

[Python] 백준 2504번 괄호의 값

문제 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 X www.acmicpc.net 입력 첫째 줄에 괄호열을 나타내는 문자열(스트링)이 주어진다. 단 그 길이는 1 이상, 30 이하이다. 출력 첫째 줄에 그 괄호열의 값을 나타내는 정수를 출력한다. 만일 입력이 올바르지 못한 괄호열이면 반드시 0을 출력해야 한다. 입력 예제 (()[[]])([]) 출력 예제 28 문제 풀이 열린 괄호 임시변수에 각 괄호 값에 맞는 값을 곱하고, 스택에 열린 괄호를 넣는다. '('는 2를 곱하고, '['는 3을 곱한다. 닫힌 괄호 스택이 비었거나 괄호의..

[Python] 백준 1063번 킹

문제 1063번: 킹 8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 www.acmicpc.net 입력 첫째 줄에 킹의 위치, 돌의 위치, 움직이는 횟수 N이 주어진다. 둘째 줄부터 N개의 줄에는 킹이 어떻게 움직여야 하는지 주어진다. N은 50보다 작거나 같은 자연수이고, 움직이는 정보는 위에 쓰여 있는 8가지 중 하나이다. 출력 첫째 줄에 킹의 마지막 위치, 둘째 줄에 돌의 마지막 위치를 출력한다. 입력 예제 A1 A2 5 B L LB RB LT 출력 예제 A1 A2 문제 풀이 먼저 들어오는 킹과 돌의 위치를 형식에 맞게 파싱한다. 그 후 돌이나 킹이 맵 밖으..

[Python] SWEA 13428번 숫자 조작

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 숫자 길이가 그다지 길지 않으므로, 모든 인덱스 값을 리스트에 넣은 후, 조합을 사용하여 2개씩 뽑는다. 2개씩 뽑은 값의 인덱스들을 바꾼 후, 앞자리가 0이라면 원위치 시키고, 앞자리가 0이 아니라면, 제일 큰 수와 제일 작은 수를 비교하여 대소를 가린 후, 이 값이 더 크다면 max_val에 더 작다면 min_val에 넣는다. 비교를 마쳤다면 꼭 다시 바꾼 인덱스끼리 바꿔 원위치 시켜준다 tmp: min_val = tmp # 비교 후 원상복귀 n[i],n[j] = n[j],n[i] print(f'#{tc + 1}',min_val,max_val)

[Python] SWEA 1228,1230번 암호문1, 암호문3

1228번 문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 삽입되는 위치와 개수, 삽입되는 모든 숫자들은 I뒤에 나오므로, I가 나온 다음 값들만 탐색한다. I바로 다음 값은 삽입위치, 그 다음 값은 삽입해야 할 숫자들의 총 개수이므로, 각각의 값들을 파싱해준 후, 삽입해야 할 숫자들의 개수만큼 for문을 돌려, 원래 저장되어있는 리스트에 값을 하나씩 삽입한다. 위 과정을 반복하여 삽입을 모두 마쳤다면 앞에서 10개까지만 형식에 맞게 출력한다. 코드 for tc in range(10): n = int(input()) array = list(map(int,input().split())) chang..

[Python] SWEA 2817번 부분 수열의 합

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 재귀적으로 리스트의 각 값을 더해가면서 k값이 됐을 때 카운트 해 준다. 카운트 한 값을 형식에 맞게 출력한다. 코드 def find_k_val(index, num): # 더한 값이 k인 횟수를 세는 전역변수 global cnt # 재귀 종료조건 (인덱스 끝까지 탐색을 마친경우, 더한 값이 k인 경우) if num == k: cnt += 1 return if index == n: return # 값을 더하기 위해 현재 인덱스의 값 임시변수에 할당 tmp = array[index] find_k_val(index+1, num + tmp) # 현재 값에..

Algorithm/BFS&DFS 2023.05.15