문제 https://www.acmicpc.net/problem/19591 Algorithm 1. 문자열을 파싱해 수와 연산자를 분리한다. 수는 vector에 push하고 연산할 수의 위치를 나타내는 변수left , right도 선언한다. 연산자는 맨 앞 혹은 맨 뒤의 것이 수행되므로, deque에 push한다. 2. 문제의 조건에 따라 연산을 진행한다. 앞의 연산자가 수행될 경우 vector[left]와 vector[left+1]를 연산하고, 뒤의 연산자가 수행될 경우 vector[right-1]와 vector[right] 연산한다. 연산 결과는 각각 vector[left+1]과 vector[right-1]에 담긴다. - 문자열은 어떻게 파싱하는가? 1. 문자열을 순회하며 첫 번째 연산자를 제외하고, 연..
문제 링크 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 문제 설명 사용자가 입력한 1부터 n까지의 수열이 있다. 스택 내에서 push와 pop으로 넣었다 뺏다 하면서 그 수열과 같게 만들어야 한다. 만약 수열이 안 만들어지면 NO를 출력한다. 코드 #include #include #include #include #include #include using namespace std; int main() { ios_base:..
https://www.acmicpc.net/problem/1718 1718번: 암호 Vigenere cipher이라는 암호화 방법은 암호화하려는 문장 (평문)의 단어와 암호화 키를 숫자로 바꾼 다음, 평문의 단어에 해당하는 숫자에 암호 키에 해당하는 숫자를 더하는 방식이다. 이 방법을 변 www.acmicpc.net 문제 소스코드 문제풀이 암호화 키가 암호 문자보다 짧으면 안되고, 너무 길게 잡지 않기 위해 사칙연산과 ceil()을 이용해 길이를 조절해주었다. a보다 이전이라 z로 돌아가는 경우와 그렇지 않은 경우 두 경우로 나누어 return 해주는 함수를 만들어 주었다 for문에서는 띄어쓰기가 아닌 경우를 구분해주고, 리스트에 추가한 후 joion을 이용해 출력해주었다
문제 https://www.acmicpc.net/problem/2566 2566번: 최댓값 첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다. www.acmicpc.net 소스코드 arr = [] for i in range(9): arr.append(list(map(int, input().split(' ')))) m = 0 idx = 0 for i in range(9): for j in range(9): if m
https://www.acmicpc.net/problem/3986 3986번: 좋은 단어 이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에 www.acmicpc.net 문제 소스코드 문제풀이 이 문제는 리스트와 pop(),append()를 이용해 풀었다. 문자열을 순회할 때 첫 문자는 무조건 리스트에 넣고, 그 이후는 리스트의 마지막 문자와 비교하여 같으면 pop() 아니면 append() 하여 반복문이 끝났을 때 리스트가 비어있으면 ans+=1 해주었다.
https://www.acmicpc.net/problem/12759 12759번: 틱! 택! 토! 승자가 결정되는 즉시 이긴 플레이어의 번호를 출력한다. 플레이어의 번호는 1 또는 2이다. 무승부라면 0을 출력한다. www.acmicpc.net 문제 소스코드 문제풀이 선공할 번호만 입력을 받기 때문에 후공 변수는 선공 번호 입력에 따라 따로 받아주었다. player가 체크할 때마다 리스트에 추가해주어 리스트를 완성시키고, 매겨변수로 player와 리스트를 받아 승리패턴이 나오면 player 번호를 리턴, 승리패턴이 나오진 않으면 0 리턴을 하는 함수를 만들어주었다. 함수의 리턴값을 flag 변수에 받아 0이 아니라면 flag를 출력하고 res변수에 flag값을 넣고 반복문이 끝난 후, res가 0이라면 ..
어떤 것을 pop 할지를 잘못 생각해서 삽질한 문제 스택에서 없애야 할 것 건물이 더 이상 확장할 수 없는 경우, pop 한다. 입력으로 들어온 Y가 스택의 상단 T보다 작다면, (Y < stack().top()) 높이 T를 가지는 건물의 범위는 거기서 끝나기 때문에, 더 이상 스택에 있을 필요가 없어진다. 스택에 넣지 말아야 할 상황 건물의 영역이 이어지는 경우, 스택에 push 하지 않는다. (Y == stack.top()) 입력으로 들어온 Y가 스택의 상단 T와 같다면 스택에 넣지 않는다. 고층 건물에 대한 정보가 삭제된 후, 바뀐 스택의 상단 T가 N과 높이가 같다면, 높이 N의 건물이 계속되는 형태기 때문에, 따로 카운팅을 할 필요가 없어진다. 스택에 넣어야 하는 상황 스택이 비어있을 때와, 입..
2828번: 사과 담기 게임 (acmicpc.net) 2828번: 사과 담기 게임 상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M
7795번: 먹을 것인가 먹힐 것인가 심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을 www.acmicpc.net 최종 코드 import sys input = sys.stdin.readline t = int(input()) ans = list() for i in range(t): n, m = map(int, input().split()) a = sorted(list(map(int, input().split())), key= lambda x:-x) b = sorted(list(map(int, input().split())))..
https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 문제 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은..
https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고..
https://www.acmicpc.net/problem/2999 문제 매일 밤, 정인이는 상근이에게 이메일을 보낸다. 정인이는 자신의 이메일이 해킹당할 수도 있다는 생각에, 내용을 항상 암호화해서 보낸다. 정인이가 사용하는 암호 알고리즘은 다음과 같다. 정인이가 보내는 메시지는 총 N글자이다. 먼저, 정인이는 R