Stay Hungry Stay Foolish

전체 글 423

[스프링] gradlew build Failed 해결

build를 실패하면 저 빨간색 줄에 BUILD FAILED 라고 뜬다. 이전 포스팅에서 JDK 1.8.0_291 버전을 설치했는데 ./gradlew를 됐지만, ./gradlew build를 했더니 빌드가 실패했다고 떴다. 스프링 프로젝트를 생성 당시에 스프링 부트 3.0 미만 버전들은 가급적이면 자바 11을 설치해야 하는데 그걸 간과하고 있었다. 스프링 부트 3.0 이상은 Java 17 이상을 사용해야 한다. 나는 생성 당시 Spring Boot 2.7-을 선택했어서 자바 11을 사용했어야 했다. 만약 현재 버전을 확인하고 싶다면 윈도우 + R -> cmd -> java -version 이라고 쳐본다. JDK 11을 설치해주고 PATH, JAVA_HOME 경로를 재설정한다. JDK 11 Version ..

TIL 2023.05.12

[스프링] JAVA_HOME ERROR

인텔리제이에서 빌드하고 실행하는 과정에서 오류가 났다. 콘솔에서 ./gradlew를 쳤더니 JAVA_HOME 에러가 난 것을 볼 수 있다. 오류를 잡기 위해 구글링을 열심히 해봤다. (이틀동안..) 첫 번째 시도. 1. 윈도우 검색창에 시스템 환경 변수 편집을 치고 들어간다. 그럼 시스템 속성 창이 바로 뜨는데, 저기서 빨간 색 줄의 환경 변수로 들어간다. 2. 환경 변수 창 -> 시스템 변수의 JAVA_HOME을 클릭하고 하단의 편집 버튼을 누른다. 3. 변수 값에서 맨 뒤에 있는 ;(세미콜론)을 제거한다. 그런데 나는 애초에 세미콜론이 없었다. 그래서 다른 방법을 찾았다. 두 번째 시도. 1. 환경 변수 창 -> 시스템 변수의 PATH를 클릭하고 하단의 편집 버튼을 누른다. 그럼 편집 창이 나오는데 ..

TIL 2023.05.12

BOJ 15651번 : N과 M (3) (Python/Silver 3)

15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 설명 1 ~ N까지 자연수 중에서 M개를 고른 수열을 나열해서 출력하라는 문제이다. 또한 같은 수를 골라도 된다. 풀이 풀이는 간단하다. 1부터 N까지 수를 리스트에 다 담는다. 중복된 숫자도 들어가야 하니 중복순열을 사용한다. 중복순열은 순열과는 약간 다르게, 같은 숫자를 중복해서 담을 수 있다. ✎ itertools 라이브러리에서 product 함수를 import 한다. ☐ product(list, repeat = 뽑을 개수) Solution import s..

BOJ 11725번 : 트리의 부모 찾기 (Python/Silver 2)

11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 설명 노드 개수를 7개라고 가정하자. 예제 입력에 둘째 줄부터 트리 상에서 연결된 두 정점이 주어진다고 했으니 그림으로 표현하면 다음과 같다. 파란색 숫자는 예제에 입력된 두 정점을 순서대로 연결된 것을 표현한 것이다. 풀이 이 문제는 DFS와 BFS 문제로 풀 수 있는데 필자는 DFS로 풀었다. for _ in range(N-1): a, b = map(int, input().split()) #노드와 연결된 걸 표현하기 위해 인접 리스트에 각각 저장 graph[a].append(b) graph[b].append(a) 위 코드를..

Greedy (그리디 알고리즘)

그리디 알고리즘 정의 탐욕 혹은 욕심쟁이 알고리즘이라고도 하며, 탐욕이란 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미한다. 매 순간 가장 좋아 보이는 것을 선택하며, 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 그리디 알고리즘은 따로 알고리즘의 사용 방법을 알고 있어야 한다거나, 외워야 하는 건 없다. 코딩 테스트에서 출제되는 그리디 알고리즘 유형의 문제는 창의력, 즉 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구한다. 다시 말해 특정한 문제를 만났을 때 단순히 현 상황에서 가장 좋아 보이는 것만을 선택해도 문제를 풀 수 있는지를 파악할 수 있어야 한다. 대표적인 문제로는 거스름돈이 있다. 5585번: 거스름돈 타로는 자주 JOI잡화점에서 물건을 산다. JO..

알고리즘 2023.05.07

BOJ 2587번 : 대표값2 (Python/Bronze 2)

2587번: 대표값2 어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30의 평균은 (10 + 40 + 30 + 60 + www.acmicpc.net 문제 어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 평균 이외의 또 다른 대표값으로 중앙값이라는 것이 있다. 중앙값은 주어진 수를 크기 순서대로 늘어 놓았을 때 가장 중앙에 놓인 값이다. 다섯 개의 자연수가 주어질 때 이들의 평균과 중앙값을 구하는 프로그램을 작성하시오. 입력 첫째 줄부터 다섯 번째 줄까지 한 줄에 하나씩 자연수가..

BOJ 9012번 : 괄호 (Python/Silver 4)

9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x..

BOJ 10773번 : 제로 (Python/Silver 4)

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

BOJ 10866번 : 덱 (Python/Silver 4)

10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 정수를 저장하는 덱(Deque)를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 여덟 가지이다. push_front X: 정수 X를 덱의 앞에 넣는다. push_back X: 정수 X를 덱의 뒤에 넣는다. pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다. pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다...

BOJ 10709번 : 기상캐스터 (Python/Silver 5)

10709번: 기상캐스터 출력은 H 행으로, 각 행에는 공백으로 구분된 W 개의 정수를 출력한다. 출력의 i 번째 행 j 번째 정수 (1 ≦ i ≦ H, 1 ≦ j ≦ W) 는, 지금부터 몇 분후에 처음으로 구역 (i, j) 에 구름이 뜨는지를 표시 www.acmicpc.net 문제 JOI시는 남북방향이 H 킬로미터, 동서방향이 W 킬로미터인 직사각형 모양이다. JOI시는 가로와 세로의 길이가 1킬로미터인 H × W 개의 작은 구역들로 나뉘어 있다. 북쪽으로부터 i 번째, 서쪽으로부터 j 번째에 있는 구역을 (i, j) 로 표시한다. 각 구역의 하늘에는 구름이 있을 수도, 없을 수도 있다. 모든 구름은 1분이 지날 때마다 1킬로미터씩 동쪽으로 이동한다. 오늘은 날씨가 정말 좋기 때문에 JOI시의 외부에서..

BOJ 6359번 : 만취한 상범 (Python/Bronze 2)

6359번: 만취한 상범 한 줄에 한 개씩 각 테스트 케이스의 답, 즉 몇 명이 탈출할 수 있는지를 출력한다. www.acmicpc.net 문제 서강대학교 곤자가 기숙사의 지하에는 n개의 방이 일렬로 늘어선 감옥이 있다. 각 방에는 벌점을 많이 받은 학생이 구금되어있다. 그러던 어느 날, 감옥 간수인 상범이는 지루한 나머지 정신나간 게임을 하기로 결정했다. 게임의 첫 번째 라운드에서 상범이는 위스키를 한 잔 들이키고, 달려가며 감옥을 한 개씩 모두 연다. 그 다음 라운드에서는 2, 4, 6, ... 번 방을 다시 잠그고, 세 번째 라운드에서는 3, 6, 9, ... 번 방이 열려있으면 잠그고, 잠겨있다면 연다. k번째 라운드에서는 번호가 k의 배수인 방이 열려 있으면 잠그고, 잠겨 있다면 연다. 이렇게 ..

BOJ 14916번 : 거스름돈 (Python/Silver 5)

14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net 문제 손님이 2원짜리와 5원짜리로만 거스름돈을 달라고 한다. 2원짜리 동전과 5원짜리 동전은 무한정 많이 가지고 있다. 동전의 개수가 최소가 되도록 거슬러 주어야 한다. 거스름돈이 n인 경우, 최소 동전의 개수가 몇 개인지 알려주는 프로그램을 작성하시오. 예를 들어, 거스름돈이 15원이면 5원짜리 3개를, 거스름돈이 14원이면 5원짜리 2개와 2원짜리 2개로 총 4개를, 거스름돈이 13원이면 5원짜리 1개와 2원짜리 4개로 총 5개를 주어야 동전의 개수가 최소가 된다. 입력 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. 출력 거스름돈 동전의 최소 개수를 출력..

BOJ 1547번 : 공 (Python/Bronze 3)

1547번: 공 첫째 줄에 컵의 위치를 바꾼 횟수 M이 주어지며, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 컵의 위치를 바꾼 방법 X와 Y가 주어지며, X번 컵과 Y번 컵의 위치를 서로 바꾸는 것 www.acmicpc.net 문제 세준이는 컵 3개를 탁자 위에 일렬로 엎어놓았다. 컵의 번호는 맨 왼쪽 컵부터 순서대로 1번, 2번 3번이고, 세준이는 이 컵을 이용해서 게임을 하려고 한다. 먼저 1번 컵의 아래에 공을 하나 넣는다. 세준이는 두 컵을 고른 다음, 그 위치를 맞바꾸려고 한다. 예를 들어, 고른 컵이 1번과 2번이라면, 1번 컵이 있던 위치에 2번 컵을 이동시키고, 동시에 2번 컵이 있던 위치에 1번 컵을 이동시켜야 한다. 이때 공은 움직이지 않기 때문에, 공의 위치는 ..

BOJ 1541번 : 잃어버린 괄호 (Python/Silver 2)

1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 문제 세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오. 입력 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리..