Algorithms

    [백준/10773번] 제로(CCC 2015 Senior Division) [Java]

    [백준/10773번] 제로(CCC 2015 Senior Division) [Java]

    문제 나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다. 재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다. 재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다. 재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자! 입력 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다. 정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할..

    [백준/17173번] 배수들의 합(충남대 3회 생각하는 프로그래밍 대회)[Java]

    [백준/17173번] 배수들의 합(충남대 3회 생각하는 프로그래밍 대회)[Java]

    문제 신원이는 백준에서 배수에 관한 문제를 풀다가 감명을 받아 새로운 문제를 만들어보았다. 자연수 N과 M개의 자연수 Ki가 주어진다. Ki중 적어도 하나의 배수이면서 1 이상 N 이하인 수의 합을 구하여라. 입력 첫 번째 줄에 N과 M가 주어진다. (2 ≤ N ≤ 1000, 1 ≤ M < N) 그다음 줄에 M개의 정수 Ki가 주어진다. (2 ≤ Ki ≤ 1000) 동일한 Ki는 주어지지 않으며, 오름차순으로 정렬되어있다. 출력 배수들의 합을 출력한다. 풀이 정수 N을 선언받은 뒤 1부터 N까지의 수 중 따로 선언받은 M개의 정수 K에 나누어 떨어지는 수의 총합을 구하는 문제이다. 예를들어 N=10 M=2일때 K를 2와 3을 입력 받았다면 1~10중 2와 3으로 나누어떨어지는 수만을 더하면 42가 도출된..

    [백준/17530번] Buffon(Maratona de Programação SBC 2019)[Java]

    [백준/17530번] Buffon(Maratona de Programação SBC 2019)[Java]

    Problem The Kingdom of Matchings is governed by a generous commander. The commander’s fame and great qualities are known to all, including neighboring kingdoms. One of his most famous qualities is his good humor, which is nourished daily by a court buffoon, elected annually at the Great Comedy Contest (GCC) of the kingdom. The court buffoon helps to relieve all the tension of the various politic..

    [백준/15740번] A+B - 9 [Java]

    [백준/15740번] A+B - 9 [Java]

    문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 A와 B (-1010000 ≤ A, B ≤ 1010000)가 주어진다. 출력 첫째 줄에 A+B를 출력한다. 서브태스크 1 (5점) 0 ≤ A, B ≤ 10 서브태스크 2 (10점) -100 ≤ A, B ≤ 100 서브태스크 3 (10점) 0 ≤ A, B ≤ 109 서브태스크 4 (15점) -109 ≤ A, B ≤ 109 서브태스크 5 (15점) 0 ≤ A, B ≤ 260 서브태스크 6 (20점) -260 ≤ A, B ≤ 260 서브태스크 7 (20점) 0 ≤ A, B ≤ 1010000 서브태스크 8 (5점) -1010000 ≤ A, B ≤ 1010000 풀이 처음에 단순 계산 문제인 줄 알고 당연하게 int..

    [백준/5533번] 유니크(JOI 2013)[Java]

    [백준/5533번] 유니크(JOI 2013)[Java]

    문제 상근이와 친구들은 MT에 가서 아래 설명과 같이 재미있는 게임을 할 것이다. 각 플레이어는 1이상 100 이하의 정수를 카드에 적어 제출한다. 각 플레이어는 자신과 같은 수를 쓴 사람이 없다면, 자신이 쓴 수와 같은 점수를 얻는다. 만약, 같은 수를 쓴 다른 사람이 있는 경우에는 점수를 얻을 수 없다. 상근이와 친구들은 이 게임을 3번 했다. 각 플레이어가 각각 쓴 수가 주어졌을 때, 3번 게임에서 얻은 총 점수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 참가자의 수 N이 주어진다. (2 ≤ N ≤ 200) 둘째 줄부터 N개 줄에는 각 플레이어가 1번째, 2번째, 3번째 게임에서 쓴 수가 공백으로 구분되어 주어진다. 출력 각 플레이어가 3번의 게임에서 얻은 총 점수를 입력으로 주어진 순서대로 ..

    [백준/15803번] PLAYERJINAH’S BOTTLEGROUNDS (2018 SCCC Programming Contest)[Java]

    [백준/15803번] PLAYERJINAH’S BOTTLEGROUNDS (2018 SCCC Programming Contest)[Java]

    문제 한때 굉장히 유행하고 유명했던 게임, PLAYERJINAH’S BOTTLEGROUNDS는 FPS(First-Person Shooter) 장르의 게임이다. 전 세계적으로 많은 사람을 열광시킨 이 게임은 영화 Bottle Royale 을 모티브로 만들어졌다. 영화 Bottle Royale 에서는 한 학급의 학생들을 한 섬에 가두고, 그들에게 각자 병을 지급한 뒤, 단 한 명의 승자가 남을 때까지 서로 병 던지기를 시키는 내용이 나온다. 이 게임은 그와 비슷하게 100명의 플레이어가 각자 거대한 수송기에서 낙하산으로 낙하하여 한 명의 승자가 남을 때까지 진행된다. 이 게임을 즐기는 진아는 굉장한 실력의 게이머로서, 그녀의 실력은 화면 속의 적을 동시에 3명까지 맞춰 쓰러뜨릴 정도로 잘한다. 대신에 그녀가..

    [백준/2676번] 라스칼 삼각형(2011 Greater New York Programming Contest )[Java]

    [백준/2676번] 라스칼 삼각형(2011 Greater New York Programming Contest )[Java]

    문제 라스칼의 삼각형은 파스칼의 삼각형과 비슷하다. 라스칼의 삼각형에서 가장 윗 줄은 0번 줄이다. i번째 줄에는 i+1개의 숫자가 들어있고, 차례대로 0번부터 i번이다. R(i,j)는 i번 줄의 j번째 숫자이다. R(n,m) = 0 (n

    [백준/7326번] Number Steps (Tehran Site 2000)[Java]

    [백준/7326번] Number Steps (Tehran Site 2000)[Java]

    문제 Starting from point (0,0) on a plane, we have written all non-negative integers 0,1,2,... as shown in the figure. For example, 1, 2, and 3 has been written at points (1,1), (2,0), and (3,1) respectively and this pattern has continued. You are to write a program that reads the coordinates of a point (x, y), and writes the number (if any) that has been written at that point. (x, y) coordinates ..

    [백준/10709번] 기상캐스터(JOI 2015)[Java]

    [백준/10709번] 기상캐스터(JOI 2015)[Java]

    문제 JOI시는 남북방향이 H 킬로미터, 동서방향이 W 킬로미터인 직사각형 모양이다. JOI시는 가로와 세로의 길이가 1킬로미터인 H × W 개의 작은 구역들로 나뉘어 있다. 북쪽으로부터 i 번째, 서쪽으로부터 j 번째에 있는 구역을 (i, j) 로 표시한다. 각 구역의 하늘에는 구름이 있을 수도, 없을 수도 있다. 모든 구름은 1분이 지날 때마다 1킬로미터씩 동쪽으로 이동한다. 오늘은 날씨가 정말 좋기 때문에 JOI시의 외부에서 구름이 이동해 오는 경우는 없다. 지금 각 구역의 하늘에 구름이 있는지 없는지를 알고 있다. 기상청에서 일하고 있는 여러분은 각 구역에 대해서 지금부터 몇 분뒤 처음으로 하늘에 구름이 오는지를 예측하는 일을 맡았다. 각 구역에 대해서 지금부터 몇 분뒤 처음으로 하늘에 구름이 오..

    [백준/3034번] 앵그리 창영(COCI 2006/2007) [Java]

    [백준/3034번] 앵그리 창영(COCI 2006/2007) [Java]

    문제 창영이는 화가나서 성냥을 바닥에 던졌다. 상근이는 바닥이 더러워진 것을 보고 창영이를 매우 혼냈다. 강산이는 근처에서 박스를 발견했다. 상덕이는 강산이가 발견한 박스를 상근이에게 주었다. 상근이는 박스에 던진 성냥을 모두 담아오라고 시켰다. 하지만, 박스에 들어가지 않는 성냥도 있다. 이런 성냥은 박스에 담지 않고 희원이에게 줄 것이다. 성냥이 박스에 들어가려면, 박스의 밑면에 성냥이 모두 닿아야 한다. 박스의 크기와 성냥의 길이가 주어졌을 때, 성냥이 박스에 들어갈 수 있는지 없는지를 구하는 프로그램을 작성하시오. 창영이는 성냥을 하나씩 검사한다. 입력 첫째 줄에 던진 성냥의 개수 N과 박스의 가로 크기 W와 세로 크기 H가 주어진다. (1 ≤ N ≤ 50, 1 ≤ W, H ≤ 100) 다음 N개..

    [백준/2822번] 점수 계산(COCI 2011/2012) [Java]

    [백준/2822번] 점수 계산(COCI 2011/2012) [Java]

    문제 상근이는 퀴즈쇼의 PD이다. 이 퀴즈쇼의 참가자는 총 8개 문제를 푼다. 참가자는 각 문제를 풀고, 그 문제를 풀었을 때 얻는 점수는 문제를 풀기 시작한 시간부터 경과한 시간과 난이도로 결정한다. 문제를 풀지 못한 경우에는 0점을 받는다. 참가자의 총 점수는 가장 높은 점수 5개의 합이다. 상근이는 잠시 여자친구와 전화 통화를 하느라 참가자의 점수를 계산하지 않고 있었다. 참가자의 8개 문제 점수가 주어졌을 때, 총 점수를 구하는 프로그램을 작성하시오. 입력 8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문제, ... 8번 문제이다. 출력 첫째 줄에..

    [백준/2525번] 오븐 시계(한국정보올림피아드)[Java]

    [백준/2525번] 오븐 시계(한국정보올림피아드)[Java]

    문제 KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다. 또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다. 훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오. 입력 첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0

    [백준/12354번] Ocean View(Small)(Code Jam for Veterans 2013)[Java]

    [백준/12354번] Ocean View(Small)(Code Jam for Veterans 2013)[Java]

    Problem Ocean View is a small town on the edge of a small lake, populated by people with high self-esteem. There is only one street in this town, Awesome Boulevard, running away from the lake on the west towards the hill in the east. All of the houses in Ocean View are situated along one side of Awesome Boulevard and are numbered starting at #1 on the edge of the lake all the way up to #N at the..

    [백준/2480번] 주사위 세개 (한국 올림피아드 2010 중등부)[Java]

    [백준/2480번] 주사위 세개 (한국 올림피아드 2010 중등부)[Java]

    문제 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)*1,000원의 상금을 받게 된다. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)*100원의 상금을 받게 된다. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)*100원의 상금을 받게 된다. 예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3*100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2*1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6*100으로 계산되어 600원을 상금으로 받게..

    [백준/10569번] 다면체 ( 2014 Pacific Northwest Region Programming Contest Division 2)[Java]

    [백준/10569번] 다면체 ( 2014 Pacific Northwest Region Programming Contest Division 2)[Java]

    문제 수학자가 구를 깎아서 볼록다면체를 만들었다. 이 수학자는 임의의 볼록다면체에 대해 (꼭짓점의 수) - (모서리의 수) + (면의 수) = 2가 성립한다는 것을 알고 있다. 그래서 구를 깎는 게 취미인 이 사람은 꼭짓점, 모서리와 면의 수를 기록할 때 꼭짓점과 모서리의 수만 세고 면의 수는 세지 않는다. 입력 첫 번째 줄에 1 이상 100 이하의 자연수 T가 주어진다. 다음 T개의 줄에 4 이상 100 이하의 자연수 V와 E가 공백을 사이에 두고 주어진다. V와 E는 각각 꼭짓점의 개수와 모서리의 개수이다. 출력 각 V와 E에 대해 볼록다면체의 면의 수를 한 줄에 하나씩 출력한다. 풀이 문제에서 V-E+x=2라고 제시해 주었으므로 x에 대해서 풀면 x=2-V+E이므로 그대로 끝. ㅇㅅㅇ 1 2 3 4..

    [백준/5586번] JOI와 IOI(JOI 2008)[Java]

    [백준/5586번] JOI와 IOI(JOI 2008)[Java]

    문제 입력으로 주어지는 문자열에서 연속으로 3개의 문자가 JOI 또는 IOI인 곳이 각각 몇 개 있는지 구하는 프로그램을 작성하시오. 문자열을 알파벳 대문자로만 이루어져 있다. 예를 들어, 아래와 같이 "JOIOIOI"에는 JOI가 1개, IOI가 2개 있다. 입력 첫째 줄에 알파벳 10000자 이내의 문자열이 주어진다. 출력 첫째 줄에 문자열에 포함되어 있는 JOI의 개수, 둘째 줄에 IOI의 개수를 출력한다. 풀이 문자열의 앞에서 부터 하나씩 , J가 나올시 O,I가 다음 열에 나오는지 확인하고 맞으면 cnt++해준다. 똑같은 방식으로 IOI도 반복해준뒤 출력해주면 완료. ㅇㅅㅇ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26..

    [백준/5597번] 과제 안 내신 분?(JOI 2007) [Java]

    [백준/5597번] 과제 안 내신 분?(JOI 2007) [Java]

    문제 X대학 M교수님은 프로그래밍 수업을 맡고 있습니다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있습니다. 교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하세요. 입력 입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)을 하나씩 입력합니다. 입력한 출석번호에 중복은 없으며, 순서에 상관없이 입력받을 수 있어야 합니다. 출력 출력은 2줄입니다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력하시면 됩니다. 예제 입력 1 3 1 4 5 7 .....(중간 생략) 29 30 예제 출력 1 2 8 풀이 불린..

    [백준/5598번] 카이사르 암호(JOI 2007 예선) [Java]

    [백준/5598번] 카이사르 암호(JOI 2007 예선) [Java]

    문제 가이우스 율리우스 카이사르(Gaius Julius Caesar)는 고대 로마 군인이자 정치가였습니다. 카이사르는 비밀스럽게 편지를 쓸 때, 'A'를 'D로', 'B'를 'E'로, 'C'를 'F'로... 이런 식으로 알파벳 문자를 3개씩 건너뛰어 적었다고 합니다. 26개의 대문자 알파벳으로 이루어진 단어를 카이사르 암호 형식으로 3문자를 옮겨 겹치지 않게 나열하여 얻은 카이사르 단어가 있습니다. 이 카이사르 단어를 원래 단어로 돌려놓는 프로그램을 작성하세요. 각 문자별로 변환 전과 변환 후를 나타낸 건 아래와 같습니다. 예를 들어서, 이 방법대로 단어 'JOI'를 카이사르 단어 형식으로 변환한다면 'MRL'을 얻을 수 있고, 앞의 예와 같은 방법으로 얻은 카이사르 단어 'FURDWLD'를 원래 단어로..

    [백준/5613번] 계산기 프로그램(JOI 2006) [Java]

    [백준/5613번] 계산기 프로그램(JOI 2006) [Java]

    문제 덧셈, 뺄셈, 곱셈, 나눗셈을 할 수 있는 계산기 프로그램을 만드시오. 입력 입력의 각 줄에는 숫자와 +, -, *, /, =중 하나가 교대로 주어진다. 첫 번째 줄은 수이다. 연산자의 우선 순위는 생각하지 않으며, 입력 순서대로 계산을 하고, =가 주어지면, 그때까지의 결과를 출력한다. 주어지는 수는 108 이하의 양의 정수이다. 계산 중 결과는 0 또는 음수가 될 수 있지만, -108 ~ 108 범위를 넘지는 않는다. 또, 나눗셈에서 소수점은 버린다. 따라서, 100/3*3 = 99이다. 출력 첫째 줄에 계산 결과를 출력한다. 풀이 입력을 어떻게 받을까 고민하다가 우선 첫 숫자는 무조건 숫자이므로 받고 이후 문자, 정수값으로 번갈아가면서 받는 것으로 구상하였다. while문을 통해서 문자열값에 ..

    [백준/5612번] 터널의 입구와 출구(JOI 2006 모의고사 2)[Java]

    [백준/5612번] 터널의 입구와 출구(JOI 2006 모의고사 2)[Java]

    문제 상근이는 남산1호터널의 입구와 출구에서 1분에 통과하는 차량의 수를 조사했다. 이때, 터널에 차량이 가장 많이 있었을 때, 몇 대 있었는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 조사한 시간 n이 주어진다. 둘째 줄에는 조사를 시작할 때, 터널 안에 들어있는 차량의 수 m이 주어진다. 다음 n개 줄의 i번째 줄(i = 1 ~ n)의 정보는 조사를 시작한지 (i-1)분이 경과한 시점부터 i분 경과할 때 까지 1분에 입구를 통과한 차의 수와 출구를 통과한 차의 수이다. n은 10000보다 작거나 같고, 1분에 통과하는 차량의 수는 100이하이다. 출력 조사 시작하고 j분이 지난 시점 (j = 0~n)에서 터널 안에 있는 차량의 수를 Sj라고 하자. 이때, Sj의 최댓값을 출력한다. 만약, 터널 ..