알고리즘

    [백준/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문을 통해서 문자열값에 ..

    [백준/5585번] 거스름돈 (JOI 2008 예선)[Java]

    [백준/5585번] 거스름돈 (JOI 2008 예선)[Java]

    문제 타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 구하는 프로그램을 작성하시오. 예를 들어 입력된 예1의 경우에는 아래 그림에서 처럼 4개를 출력해야 한다. 입력 입력은 한줄로 이루어져있고, 타로가 지불할 돈(1 이상 1000미만의 정수) 1개가 쓰여져있다. 출력 제출할 출력 파일은 1행으로만 되어 있다. 잔돈에 포함된 매수를 출력하시오. 풀이 핵심은 반복문에서 동전의 처리이다. 500원->100원 ->50원->10원 순으로 진행하기 때문에 스위치 sw를..

    [백준/17009번] Winning Score  ( CCC 2019 Junior Division)[Java]

    [백준/17009번] Winning Score ( CCC 2019 Junior Division)[Java]

    Problem You record all of the scoring activity at a basketball game. Points are scored by a 3-point shot, a 2-point field goal, or a 1-point free throw. You know the number of each of these types of scoring for the two teams: the Apples and the Bananas. Your job is to determine which team won, or if the game ended in a tie. Input The first three lines of input describe the scoring of the Apples,..

    [백준/13597번] Tri-du( A Primeira Fase da Maratona de Programação 2015) [Java]

    [백준/13597번] Tri-du( A Primeira Fase da Maratona de Programação 2015) [Java]

    Problem Tri-du é um jogo de cartas derivado do popular jogo de Truco. O jogo utiliza um baralho normal de 52 cartas, com treze cartas de cada naipe, mas os naipes são ignorados. Apenas o valor das cartas,considerados como inteiros de 1 a 13, são utilizados. No jogo, cada jogador recebe três cartas. As regras são simples: Um trio (três cartas de mesmo valor) ganha de uma dupla (duas cartas de mes..

    [백준/11104번] Fridge of Your Dreams ( IDI Open 2007 )[Java]

    [백준/11104번] Fridge of Your Dreams ( IDI Open 2007 )[Java]

    Ploblem Eirik drinks a lot of Bingo Cola to help him program faster, and over the years he has burned many unnecessary calories walking all the way to the kitchen to get some. To avoid this he has just bought a small fridge, which is beautifully placed next to his computer. To make it match his fancy big-tower with all its blinking LEDs, it is necessary to style it a bit. He has bought a weight ..

    [백준/10093번] 숫자 [Java]

    [백준/10093번] 숫자 [Java]

    문제 두 양의 정수가 주어졌을 때, 두 수 사이에 있는 정수를 모두 출력하는 프로그램을 작성하시오. 입력 두 정수 A와 B가 주어진다. (1 ≤ A, B ≤ 1015, A와 B의 차이는 최대 100,000) 출력 첫째 줄에 두 수 사이에 있는 수의 개수를 출력한다. 둘째 줄에는 두 수 사이에 있는 수를 오름차순으로 출력한다. 풀이 어려운 문제는 아니지만 처음에 실패를 2~3번해서 헤맸던 문제. 우선 제한 조건에 100,000까지 받을 수 있다했으므로 정수값인 int가 아닌 long로 선언해주어야 한다. 그리고 a와 b가 같은경우, a가 b보다 큰경우를 고려해서 반복문을 써주면 완료되는 문제. ㅇㅅㅇ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23..

    [백준/5217번] 쌍의 합 (HSPC 2012) [Java]

    [백준/5217번] 쌍의 합 (HSPC 2012) [Java]

    문제 1보다 크거나 같고 12보다 작거나 같은 자연수가 주어졌을 때, 합이 n이 되는 두 수의 쌍을 찾는 프로그램을 작성하시오. 예를 들어, 5가 주어진 경우 가능한 쌍은 1,4와 2,3이 있다. 두 수는 항상 달라야 한다. 즉, 3,3은 올바른 쌍이 아니다. 또, 첫 번째 숫자가 두 번째 숫자보다 작아야 한다. 출력하는 쌍은 항상 사전순으로 출력해야 한다. 즉, 각 쌍의 작은 숫자로 비교를 해야 한다. 예를 들어 1,5는 2,4보다 사전순으로 앞선다. 입력 첫째 줄에 테스트 케이스의 수 (< 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다. 출력 각 테스트 케이스마다 n을 만드는 쌍을 사전순으로 출력한다. n을 만드는 쌍이 없는 경우에는 아무것도 출력하지 않는다. 예제 ..

    [백준/15552번] 빠른 A+B [Java]

    [백준/15552번] 빠른 A+B [Java]

    문제 본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다. C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다. Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다. P..

    [백준/10991번] 별 찍기-16 [Java]

    [백준/10991번] 별 찍기-16 [Java]

    문제 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. 입력 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 출력 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. 풀이 for문 연습 기본 문제 앞의 빈칸을 미리 출력해준 뒤, 뒤의 별은 2로 나누어 떨어지면 빈칸 출력, 아니면 *출력으로 풀어준다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import java.util.Scanner; class Bakjoon { public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); int n=sc.nextInt(); for (int..

    [백준/2609번] 최대공약수와 최소공배수 [Java]

    [백준/2609번] 최대공약수와 최소공배수 [Java]

    문제 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다. 출력 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를,둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. 풀이 기본문제. 유클리드 호제법을 이용해서 풀면 간단하다. 최소공배수=a*b/최대공약수 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 27 28 import java.util.*; class Bakjoon { public static void main(String[] args) throws Exceptio..

    [백준/2747번] 피보나치 수 [Java]

    [백준/2747번] 피보나치 수 [Java]

    문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 n이 주어진다. n은 45보다 작거나 같은 자연수이다. 출력 첫째 줄에 n번째 피보나치 수를 출력한다. 풀이 유명한 재귀함수 예제인 피보나치 수열문제이다. Fibonacci 함수를 만들어서 출력하면 끝이라고 ..

    [백준/10984번] 내 학점을 구해줘 [Java]

    [백준/10984번] 내 학점을 구해줘 [Java]

    문제 게으른 근우는 열심히 놀다가 문득, 자신의 학점 평균이 얼마일지 궁금해졌다. 학사시스템도 들어가기 귀찮아하는 근우를 위해 구해주도록 하자. 입력 첫 번째 줄에 학기의 수 T가 주어진다. 두 번째 줄부터 T개 학기에 대한 정보가 주어진다. 각 학기에 대한 정보는 다음과 같이 구성되어 있다. 첫 번째 줄에 들었던 과목의 수 N이 주어지고, 다음 N개 줄에 걸쳐서 N개 과목들의 학점 C와 성적 G가 주어진다. (1 ≤ N ≤ 10, 1 ≤ C ≤ 6의 정수) G는 {0, 0.7, 1, 1.3, 1.7, 2, 2.3, 2.7, 3, 3.3, 3.7, 4, 4.3} 중 하나이며 소수 부분은 최대 한 자리까지 주어진다. 출력 각 학기에 대해 근우의 총 학점과 평점(GPA)을 출력한다. 정답과의 절대 오차는 1..

    [백준/1550번] 16진수 [ Java]

    [백준/1550번] 16진수 [ Java]

    문제 16진수 수를 입력받아서 10진수로 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 16진수 수가 주어진다. 이 수의 최대 길이는 6글자이다. 16진수 수는 0~9와 A~F로 이루어져 있고, A~F는 10~15를 뜻한다. 또, 이 수는 음이 아닌 정수이다. 출력 첫째 줄에 입력으로 주어진 16진수 수를 10진수로 변환해 출력한다. 예제 입력 1 복사 A 예제 출력 1 복사 10 풀이 정수 변환 함수인 Integer.parseInt()를 이용하면 쉽게 풀수 있다. ㅇㅅㅇ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import java.util.*; class Main { public static void main(String[] args) throws Exception..

    [백준/11050번] 이항 계수 1 [Java]

    [백준/11050번] 이항 계수 1 [Java]

    문제 자연수 N과 정수 K가 주어졌을 때 이항 계수 를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 0 ≤ K ≤ N) 출력 를 출력한다. 풀이 이항 계수란 위의 정의와 같이 factorial을 이용한 공식으로써 factorial함수를 따로 지정해서 문제에 접근하면 수월하다. factorial의 함수를 만들고 이를 통해 위의 공식과 똑같이 연산을 진행해주면 정답입니다! ㅇㅅㅇ 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 import java.util.*; class Main { public static void main(String[] args) throws Exception { ..