분류 전체보기

1874번: 스택 수열 (acmicpc.net)문제풀이1. 입력받을 수의 개수를 받음2. 원래의 수열을 original_series변수에 리스트 형식으로 저장한다.3. 10까지 커지는 변수 num 설정. 원래의 수열보다 num이 작은 동안 정렬한 리스트(stack 변수)에 추가해준다.(+ '+'도 출력리스트에 추가해줌)4. stack의 마지막 요소가 원래의 수열과 같을 때까지 pop()을 실행. (+ '-'도 출력리스트에 추가)- 여기서 원래 수열이 끝까지 도달했음을 확인하기 위해 original_count 추가 (1씩 더해주는 형태. 정렬의 횟수와 관계없이 원래 수열과 정렬하고 있는 수열이 몇 번째까지 맞았는지를 확인하게 해줌.)5. 스택이 존재하면 (즉, 정렬되지 않으면) 'NO'를 출력해준다.6. ..
문제https://www.acmicpc.net/problem/14561n진수는 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이다. 예를 들면, 12468은 12468 = 1 × 104 + 2 × 103 + 4 × 102 + 6 × 101 + 8 × 100로 표현할 수 있다.회문(Palindrome)이란 앞으로 읽으나 뒤로 읽으나 같은 글을 말한다. 예를 들면, madam, level, 12321은 회문이다. 반면에, Chung-ang이나 university, 54899는 회문..
문제풀이어떤 B진법에 대해 회문이 될 수 있는지 전수조사하고, 불리언 변수를 통해 결과를 출력한다. 코드
https://www.acmicpc.net/problem/11660DP를 이용해 푼 문제이다.  2차원 배열 arr은 문제에서 주어진 입력으로 만든 2차원 배열이고 배열 dp는 행별로 누적합을 구한 배열로 설정한다.그런다음, 행별로 누적합을 구한다. (dp[3][4]는 arr [3][1]부터 arr [3][4]까지 더한 것)  import java.util.*;import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringT..
https://www.acmicpc.net/problem/2630알고리즘 분류분할정복, 재귀input = __import__('sys').stdin.readlineN = int(input())Paper = [list(map(int, input().split())) for _ in range(N)]W_cnt, B_cnt = 0, 0def Paper_div(x, y, N): global W_cnt, B_cnt WB_cnt = 0 for i in range(x, x + N): for j in range(y, y + N): if Paper[i][j]: WB_cnt += 1 if not WB_cnt: W_cnt += 1 ..
https://www.acmicpc.net/problem/4949문제 풀이1. while문을 사용하여 '.' 이 나올 때까지 입력받기2. 한 문장 안에서 ( 나 [ 가 나올 경우 스택에 추가하기3. ) 나 ] 가 나올 경우3-1. 스택이 비어있지 않은 경우- 괄호가 ) 와 (   /   ] 와 [ 라면 (짝이 맞다면) 스택에서 pop()하여 요소 제거- 맞지 않다면 제대로 되어있지 않는 괄호 상태 -> flag = False, break로 탈출3-2. 스택이 비어있는 경우- 닫혀있는 괄호 앞에 짝이 맞는 요소가 없음을 의미 -> flag = False, break로 탈출4. 위 조건에서 정상적으로 수행되고(flag가 True) 이고 스택이 비어있다면(괄호들이 전부 짝에 맞게 제거) yes 출력그렇지 않다..
https://www.acmicpc.net/problem/2110문제도현이의 집 N개가 수직선 위에 있다. 각각의 집의 좌표는 x1, ..., xN이고, 집 여러개가 같은 좌표를 가지는 일은 없다.도현이는 언제 어디서나 와이파이를 즐기기 위해서 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치하려고 한다.C개의 공유기를 N개의 집에 적당히 설치해서, 가장 인접한 두 공유기 사이의 거리를 최대로 하는 프로그램을 작성하시오.입력첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주..
19637번: IF문 좀 대신 써줘 (acmicpc.net)단순 구현 -> 시간 초과이진 탐색 코드로 제출 -> 시간 초과뭐가 문젠가 했더니 입력받는 코드를 바꿔줬더니 통과됨# 반복문으로 여러 번 입력받을 시 input() 대신 sys,stdin.readline()을 꼭 쓰자# 각 캐릭터의 칭호를 찾을 때 이진 탐색import sysinput = sys.stdin.readlinen,m=map(int,input().split())level = []for _ in range(n): a, b = list(input().split()) level.append((a, int(b)))def ubound(x): left = 0 right = n-1 while left
문제 & 링크https://www.acmicpc.net/problem/1002 풀이1. x1, y1을 중심으로 하고 반지름이 r1인 원과 x2, y2를 중심으로 하고 반지름이 r2인 원의 접점을 구하는 문제이다.2. 두 원의 중심 좌표가 같을 경우 반지름의 길이가 같다면 접점은 무한대가 되고, 다르다면 접점은 없게 된다.3. 두 원의 중심 좌표가 다를 경우 접점이 두 개, 한 개, 없는 경우로 나뉜다.3-1. 접점이 두 개인 경우는 중심 좌표 간의 거리가 각 원의 반지름의 합보다는 짧고, 반지름의 차보다는 긴 경우이다.3-2. 접점이 한 개인 경우는 중심 좌표 간의 거리가 각 원의 반지름의 합과 같거나 반지름의 차와 같은 경우이다.3-3. 접점이 없는 경우는 그 외의 경우이다. 참고 자료빨간색 선: r1..
문제 & 링크https://www.acmicpc.net/problem/17608 풀이1. 보는 방향, 즉 제일 오른쪽 막대기를 시작으로 잡는다.2. 오른쪽에서 왼쪽으로 막대기를 탐색하며 지금까지 탐색한 막대기 중 가장 큰 것과 비교한다. (max값 구하는 알고리즘과 유사)3. 더 큰 막대기가 있을 경우 count 변수를 증가시키고 가장 큰 막대기를 업데이트한다.4. 2 - 3의 과정을 제일 왼쪽 막대기를 탐색할 때 까지 반복하고 최종 count를 출력한다. 코드#include #include using namespace std;int main() { int N, h; cin >> N; vector high(N); for (int i = 0; i > h; ..
https://www.acmicpc.net/problem/13410문제문제풀이거꾸로 구구단은 구구단의 결과를 뒤에서부터 읽으며 된다. 예를 들어8*1 = 8 -> 88*2 = 16 -> 618*3 = 24  -> 42반복문을 통해서 N과 1부터 K까지의 수를 곱한 각각의 결과들을 문자열로 만들어서 거꾸로 출력한 후 그 값을 숫자로 변환하여 numbers리스트에 저장한다. sorted() 함수를 통하여 numbers리스트의 원소들을 내림차순으로 정리한 후 가장 큰 원소인 numbers[0]을 출력한다.소스코드N, K = map(int, input().split())numbers = []for i in range(1, K+1): numbers.append(int(str(N*i)[::-1]))number..
https://www.acmicpc.net/problem/1874문제풀이input = __import__('sys').stdin.readlinen = int(input())x = 1arr = []out = []flag = Truefor _ in range(n): a = int(input()) while 1: if arr and a스택에 1~n의 수를 차례대로 push하면서 중간중간 원하는 수를 pop하여 수열을 만드는 문제-> arr을 stack으로 사용1. n이 커질수록 입력 시행횟수가 증가하기에 표준입력으로 받을 수 있게 함.2. 1~n까지 순서대로 push해야하기에 따로 x라는 변수를 만들어 1씩 증가하며 스택에 추가되도록 함.3. if arr : 로 스택이 비어있는지 확인4..
KauKoala
'분류 전체보기' 카테고리의 글 목록 (13 Page)