2346번: 풍선 터뜨리기 (acmicpc.net) 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net 문제 해석 N개의 풍선이 원형으로 놓여있고 안에는 숫자가 적혀있다. 풍선을 터뜨린 후 안의 숫자만큼 이동 후 다시 풍선을 터뜨리는 식으로 진행된다. 코드 문제 풀이 원형이기 때문에 앞뒤로 빼고 넣기 위해 자료구조로 덱을 사용하였다. 풍선 번호를 나타내는 덱과 풍선 안의 숫자를 나타내는 덱을 따로 que와 paper의 이름으로 선언해주었다. 처음 for문을 통해 덱에 알맞은 숫자들은 넣어 주고 ..
전체 글
항공대 알고리즘 동아리 Koala 🥰2729번: 이진수 덧셈 (acmicpc.net) 2729번: 이진수 덧셈 이진수 덧셈은 매우 간단하고, 십진수 덧셈과 비슷하게 하면 된다. 십진수 덧셈을 할 때는, 오른쪽부터 왼쪽으로 차례대로 숫자 하나씩 더하면 된다. 이진수 덧셈도 이와 비슷하게 하면 된다. 십 www.acmicpc.net 문제분석 분류 수학 구현 사칙연산 문제설명 입력 출력 소스코드
https://www.acmicpc.net/problem/11003 11003번: 최솟값 찾기 N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. www.acmicpc.net 문제분류 자료구조, 우선순위큐, 덱 문제분석 정해진 구간 L에 대하여 최솟값을 구하는 문제 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayDeque; import java.util.Deque; impor..
https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 문제분석 분류 큐 문제설명 N장의 카드를 입력한다. 1부터 N까지의 수를 큐에 입력한다. Q를 주어진 조건에 맞게 pop,push,pop 활용한다. 입력 6 출력 4 코드 #include #include using namespace std; int main() { queueque; int N; cin >> N; for(int x =1 ; x 1) //1개가 남을 때 까지 { que.pop(); q..
https://www.acmicpc.net/problem/1874 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연산을 어떻게 수행해야 하는지 출력하는 문제다. push연산을 수행할 땐 +, pop연산을 수행할 땐 -를 출력한다. 입력받은 수열을 만들 수 없는 경우에는 NO를 출력한다. 코드 #include #include #inclu..
https://www.acmicpc.net/problem/17612 17612번: 쇼핑몰 입력의 첫 줄에는 2개의 정수 N(1 ≤ N ≤ 100,000)과 k(1 ≤ k ≤ 100,000)가 주어진다. 다음 줄부터 N개의 줄에 걸쳐 고객 N명의 정보가 줄 맨 앞의 고객부터 맨 뒤 고객까지 순서대로 주어진다. i번째 www.acmicpc.net 문제 분석 시뮬레이션 문제처럼 보이기도 하지만, 조금 고민해보면 실시간으로 고객들이 계산대로 이동했다가 출구로 빠져나가는 것이 아니므로 우선순위 큐를 이용하면 문제를 쉽게 해결할 수 있다는 것을 알 수 있습니다. 차근차근 어디서 어떻게 우선순위 큐를 사용해야 할지 생각해봅시다. 문제 풀이 우선은 계산대를 우선순위 큐로 만들어야 할 것 같습니다. 이 우선순위 큐의 규..
문제 https://www.acmicpc.net/problem/14561 14561번: 회문 n진수는 base가 n인 수를 말한다. 예를 들어 십진수는 base가 10인 수이다. n진수의 수 AmAm-1Am-2…A1A0를 n진수로 표현해보면 AmAm-1Am-2…A1A0 = Am × nm + Am-1 × nm–1 + Am-2 × nm–2 + … + A1 × n1 + A0 × n0이다. www.acmicpc.net 코드 풀이 입력받은 m,n을 이용하여 n진수를 출력한다. 이때 m이 0일 경우 0을 출력한다.
https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 문제분석 0을 입력할 경우 스택에서 하나씩 값을 지운다. 소스코드 k = int(input()) money = list(int(input()) for _ in range(k)) money_list = [0] for i in range(k): if money[i] == 0: money_list.pop() else: money_list.append(money[i]) ..
문제 코드 arr=[] sum=0 for i in range(8): a=list(map(str,input())) arr.append(a) for j in range(8): if i%2==0 and j%2==0: if 'F' in arr[i][j]: sum+=1 else: None elif i%2==1 and j%2==1: if 'F' in arr[i][j]: sum+=1 else: None print(sum) 문제 풀이 먼저 arr이라는 리스트를 만들고 8개의 줄을 입력을 받는다. 그리고 문자를 입력받고 그걸 리스트로 만든 다음 arr이라는 리스트로 넣어 이중 리스트로 만들어 준다. 큰 리스트에서 작은 리스트에 순서 i 그리고 j는 리스트안에 요소 순서를 나타낸다.그리고 짝수 번째 열에서는 짝수 번 째 ..
https://www.acmicpc.net/problem/11068 11068번: 회문인 수 어떤 수를 왼쪽부터 읽어도, 오른쪽부터 읽어도 같을 때 이 수를 회문인 수라고 한다. 예를 들어, 747은 회문인 수이다. 255도 회문인 수인데, 16진수로 표현하면 FF이기 때문이다. 양의 정수를 입력 www.acmicpc.net 10진수를 입력 받고, 그 수를 2~64진수로 바꾼 수가 회문이 되는지를 확인하는 문제이다. 2~64진수로 바꾼 총 63개의 숫자 중 한 개라도 회문이 된다면 1을 출력, 그렇지 않다면 0을 출력하면 된다. 전형적인 회문 문제처럼 리스트에 {입력값%n진수}를 차곡 차곡 담는 방식으로 풀 수 있다. 다만, 문제의 예시처럼 15, 15를 각각 F, F로 바꿔주는 과정은 불필요하다. n진..
17502번: 클레어와 팰린드롬 (acmicpc.net) 17502번: 클레어와 팰린드롬 입력으로 주어진 문자열을 팰린드롬이 되도록 '?' 문자들을 적절한 알파벳 소문자들로 바꾸어 출력합니다. 방법이 여러 가지인 경우 그 중 하나만 출력합니다. www.acmicpc.net 문제분석 분류 구현 문자열 문제설명 입력 출력 소스코드
https://www.acmicpc.net/problem/6236 6236번: 용돈 관리 현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로 www.acmicpc.net 문제분석 현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로 하였다. 현우는 통장에서 K원을 인출하며, 통장에서 뺀 돈으로 하루를 보낼 수 있으면 그대로 사용하고, 모자라게 되면 남은 금액은 통장에 집어넣고 다시 K원을 인출한다. 다만 현우는 M이라는 숫자를 좋아하기..