분류 전체보기 139

백준 No.1057 토너먼트- JAVA

문제 김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 n명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를 한다. 이긴 사람은 다음 라운드에 진출하고, 진 사람은 그 라운드에서 떨어진다. 만약 그 라운드의 참가자가 홀수명이라면, 마지막 번호를 가진 참가자는 다음 라운드로 자동 진출한다. 다음 라운드에선 다시 참가자의 번호를 1번부터 매긴다. 이떄 번호를 매기는 순서는 처음 번호의 순서를 유지하면서 1번부터 매긴다. 이 말은 1번과 2번이 스타를해서 1번이 진출하고, 3번과 4번이 스타를 해서 4번이 진출했다면, 4번 다음 라운드에서 번호 2번을 배정받는다. 번호를 다시 배정 받은 후에 한 명만 남을 떄까지 라운드를 계..

알고리즘 2023.04.14

백준 No.1058 친구- JAVA

문제 지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또 다른 사람 B의 2-친구가 되기 위해선, 두 사람이 친구이거나, A와 친구이고,B와 친구인 C가 존재해야 된다. 여기서 가장 유명한 사람은 2-친구의 수가 가장 많은 사람이다. 가장 유명한 사람의 2- 친구의 수를 출력하는 프로그램을 작성하시오 풀이 문제를 많이 읽어봤지만 이해를 못해 결국 답을 봤다. 플로이드 와샬을 통해 각 최단 경로를 구하고 2나 1을 찾아 최댓값을 구한다. 플로이드 와샬에서는 최단경로를 구하기 위해 for(int i = 1; i

알고리즘 2023.04.12

백준 No.4963 섬의 개수- JAVA

문제 정사각형으로 이루어져 있는 섬과 바다 지도가 주어진다. 섬의 개수를 세는 프로그램을 작성하시오 한 정사각형과 가로,세로 또는 대각선으로 연결되어 있는 사각형은 걸어갈 수 있는 사각형이다. 두 정사각형이 같은 섬에 있으려면 한 정사각형에서 다른 정사각형으로 걸어서 갈 수 있는 경로가 있어야 한다. 지도는 바다로 둘러싸여 있으며, 지도 밖으로 나갈 수 없다. 1 1 0 2 2 0 1 1 0 3 2 1 1 1 1 1 1 5 4 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 0 0 1 0 5 4 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 0 1 1 1 5 5 1 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0 풀이 bfs로 풀었는데 주의..

알고리즘 2023.04.08

백준 No.4796 캠핑- JAVA

문제 등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만 캠핑장에는 다음과 같은 경고문이 쓰여있었다. 캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다. 강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까? 강산이는 조금 더 일반화해서 문제를 풀려고 한다. 캠핑장을 연속하는 P일 중,L일동안만 사용할 수 있다. 강산이는 이제 막 V일 짜리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까 풀이 L 5 P 8 V 20 이다 처음에 그냥 20/8하고 해당 값 곱하기 L을 한다음 나머지를 더했는데 이러면 안되었던게 V%P 값이 L보다 클 수 있다. 그니깐 주어진 5값이 20을 8로 나눈 나머지 값보다 작을 수 있다는 소리다...

알고리즘 2023.04.07

백준 No.9012 괄호- JAVA

문제 괄호 문자열은 두 개의 괄호 기호인 ')'와 ')' 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 "()" 문자열은 기본 VPS라고 부른다. 만일 X가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 "(x)"도 VPS 된다. 그리고 두 VPS x와 y를 접합(concatenation)시킨 새로운 무낮열 xy도 VPS가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다. 입력 입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 주어진다. 입력의 첫 ..

알고리즘 2023.04.06

백준 No.10816 숫자카드2- JAVA

문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적있는 숫자 카드를 상근이가 몇개 가지고 있는지 구하는 프로그램을 작성하시오. 풀이 일단 처음 이진탐색으로 접근했는데 주어진 입력으로 풀었을 때는 답이 나왔는데 제출하고 나니 틀렸다. 처음 접근했던 방법은 List를 통해 주어진 10개에 입력을 받고 이진탐색으로 찾는 숫자카드를 먼저 하나 찾으면 true를 리턴하고 N-1 한 다음 찾은 그 값을 remove를 통해 제거했다. 그러면 10개였던 배열이 9개가 되면서 N도 그에 맞게 9가 된다. 그 다음 한 번 찾았을 경우 다시 이진탐색을 해서 탐색을 시도해서 값이 없다면 해당 숫자로는 탐색을 멈춘다. 그렇게 탐색횟수를 카운트하여..

알고리즘 2023.04.04

Spring - MockMvc

MockMvc -스프링에서 제공하는 테스트 도구 중 하나로, 컨트롤러의 테스트를 지원하는 모듈이다. MockMvc를 사용하면 서버를 띄우지 않고도 컨트롤러의 동작을 테스트할 수 있다. -MockMvc는 브라우저에서 요청을 보낼 떄와 동일한 방식으로 HTTP 요청을 생성할 수 있으며, 이를통해 컨트롤러의 응답 결과를 검증할 수 있다. 또한 MockMvc를 사용하여 컨트롤러에서 사용되는 다른 빈들을 Mock객체로 대체하여 테스트를 진행할 수 있다. -MockMvc 클래스에서 가장 중요한 역할을 하는 메서드,는 perform()이다. 메서드의 선언부는 테스트 대상에 HTTP 메시지를 요청(RequestBulder)하고 실행 결과를 ResultActions에서 확인할 수 있다. 해당 perform 메소드는 인자..

Spring 2023.04.03

백준 No.10815 숫자카드- JAVA

문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있따. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오 5 6 3 2 10 -10 8 10 9 -5 2 3 4 5 -10 풀이 첫번쨰로 주어진 숫자 중에 두번쨰로 주어진 숫자가 포함된다면 1을 출력하고 없으면 0을 출력하면 된다. 문제는 쉬웠는데 이상한 곳에서 계속 멈춰있었다... while문에서 else 구문에 빠지고 탈출을 break로 해버리면 for문까지 탈출해버렸기 때문에 최대한 다른 방법으로 해보려 했지만 못하다가 메소드로 분리하니까 바로 해결 이진 탐색으로 문제를 푸는데 시작 인덱스 0부터 주어진 N-1 인덱스를 기준으로 두번쨰 줄에 주어..

알고리즘 2023.04.03

백준 No.6236 용돈 관리- JAVA

문제 현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 뺴서 쓰기로 하였다. 현우는 통장에서 K원을 인출하며, 통장에서 뺸 돈으로 하루를 보낼 수 있으면 그대로 사용하고, 모자라게 되면 남은 금액은 통장에 집어넣고 다시 K원을 인출한다. 다만 현우는 M이라는 숫자를 좋아하기 떄문에, 정확히 M번을 맞추기 위해서 남은 금액이 그날 사용할 금액보다 많더라도 남은 금액은 통장에 집어넣고 다시 K원을 인출할 수 있다. 현우는 돈을 아끼기 위해 인출 금액 K를 최소화하기로 하였다. 현우가 필요한 최소 금액 K를 계산하는 프로그램을 작성하시오 풀이 해당 문제는 계속 생각만하다가 못 풀었다...

알고리즘 2023.04.01

백준 No.1654 랜선 자르기- JAVA

문제 집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다. 이미 오영식은 자체적으로 K개으 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm짜리 랜선을 두개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다) 편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그리고 자를 떄는 항상 센티미터 단위로 정수길이만큼 자른다고 가..

알고리즘 2023.03.31