Algorithm/Simulation 35

[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 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 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] SWEA 1873번 상호의 배틀필드

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

[Python] SWEA 1240번 단순 2진 암호코드

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 문제를 해결하기 위해 필요한 암호의 규칙은 일단 모든 암호값이 1로 끝나고, 암호 안에 1이 한 번도 없는 암호가 없다는 점이다. 따라서 암호를 해독하기 위해 필요없는 행과 열의 값들을 모두 삭제한다. 행은 1이 한번이라도 등장하는 곳을 빼고 모두 잘라내고, 열은 마지막 1을 가지는 인덱스 값을 구해 마지막 인덱스까지 열의 길이가 56이 될 수 있또록 자른다. 그 후 해독해야하는 암호들만 남아있는 문자열을 사용하여 문자를 7개씩 잘라가며 해독하여 해독한 값을 새로운 배열에 모두 저장한다. 그 후 암호 검증과정에 따라 인덱스가 홀수인 경우 3을 곱하..