gyuwon95의 등록된 링크

 gyuwon95로 등록된 티스토리 포스트 수는 149건입니다.

[Java] 람다 표현식(Lambda Expression) 정리 [내부링크]

1. 람다 표현식이란 (Lambda Expression)? - Java 8버전 이후 도입된 문법으로, 메서드를 간결한 함수 식으로 표현한 것 2. 람다식 특성 - 익명 : 이름이 없다. - 함수 : 메서드처럼 특정 클래스에 종속되지 않는다. 파라미터 리스트, 바디, 리턴값을 포함 - 전달 : 람다 표현식을 메서드의 인자로 전달하거나 변수 값으로 저장할 수 있다. - 간결성 : 익명 클래스처럼 부가 코드를 구현할 필요가 없다. 3. 람다 작성법 ( 매개변수 ) -> { 표현식 }; 1) 메서드의 이름과 반환타입을 제거하고 화살표(->)를 중괄호 앞에 추가 2) 반환 타입 생략 및 같은 타입 매개변수 생략가능 4. 장단점 장점 - 코드가 간결해지고, 가독성이 향상됨 - 코딩하는 시간의 감소 가능 단점 - 람..

2022년 돌아보며... [내부링크]

2020년에 이어서 오랜만에 회고록을 써보려고 한다. 매우 많은 일들이 있었던 작년에 했던 일들을 간단하게나마 작성해보았다. 1월 : 마지막 학기의 학교 수업이 끝나고 본격적으로 취업준비를 하기위해 알고리즘에 대한 문제를 꾸준히 풀어나갔다. 하루에 2-3문제를 푸는 것을 목표로 하였고, 스프링에 대한 강의를 복습하며 중요한 키워드들을 정리해 나갔다. 상반기 취업을 목표로 하고 있었고, 친한 동네친구도 같은 과였기에 친구와 주 1-2회 정도 만나 같이 스터디를 진행하기도 하였다. 2월 : 드디어 15년에 입학했던 학교를 졸업하게 되었다. 그때에는 졸업하시는 선배님들을 보며 나는 아주 먼 이야기라고 생각했는데 처음 입학했을 때가 얼마 안된거 같은 느낌이다. 부모님 오시기 전에 일찍 도착해서, 새내기때 수업을..

[Java] int, String 배열의 정렬 방법 [내부링크]

1. int 배열의 정렬 - 오름차순 : Arrays.sort(인스턴스명); - 내림차순 : Arrays.sort(인스턴스명, Comparator.reverseOrder()); 이때, 내림차순의 Comparator를 쓰기 위해서는 Wrapper 클래스(String, Integer, Double)로 변환해주어야 사용이 가능 2. String 배열의 정렬 - 오름차순 : Arrays.sort(인스턴스명); - 내림차순 : Arrays.sort(인스턴스명, Comparator.reverseOrder());

나의 앞으로의 방향성 [내부링크]

대기업 계열사에 합격하고 회사에 다닌지 약 1주일이 되었다. 취준기간 대비해서 비교적 빠르게 합격했다고 생각해서 기분이 매우 좋았지만, 같이 들어오는 동기 중에서는 나보다 훨씬 어린친구들도 많았기에 존경심이 들기도 했다. 회사를 들어간 이후, 긴장이 풀려서인지 밤낮이 바뀐 삶을 바꾸려고 하다보니 그런건지는 모르겠지만 자주 피곤한 느낌이 든다. 아마 둘다겠지만 후자가 조금 더 가깝지 않을까 하는 생각이 든다. 이렇게 내 자신의 단기간의 목표를 이루고 나니 바로 이어서 더 큰 목표 설정을 하는 내 자신을 돌아보게 되었다. 회사 합격으로 기뻐하는 순간은 잠시였고, 더 나은 사람들과 나를 비교하며 더욱 성장하기 위해서만 생각하는 내 모습을 말이다. 사실 좋은 직장을 들어가려는 목적은 내가 더욱 행복한 삶을 살기..

[Java] 진수 변환을 도와주는 메서드 [내부링크]

1. 10진수 -> n진수 방법 1) 10진수 -> 2진수, 8진수, 16진수 2진수, 8진수, 16진수에 한에서는 Integer.to- 형태로 변환이 가능하다. (Binary, Octal, Hex) 방법 2) 그 외의 여러 진수를 사용하고 싶을때는 Integer.toString(정수,진수) 형태로 변환이 가능하다. 2. n진수 -> 10진수 주의해야 할 점은 parseInt("문자열", "N진수") 형태이므로 바꾸고 바꾸고 싶은 값이 정수형이라면 String 타입으로 변환후에 사용해야 한다.

[프로그래머스] 파일명 정렬 [내부링크]

문제 설명 파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램의 과거 버전을 모두 담고 있어, 이름 순으로 정렬된 파일 목록은 보기가 불편했다. 파일을 이름 순으로 정렬하면 나중에 만들어진 ver-10.zip이 ver-9.zip보다 먼저 표시되기 때문이다. 버전 번호 외에도 숫자가 포함된 파일 목록은 여러 면에서 관리하기 불편했다. 예컨대 파일 목록이 ["img12.png", "img10.png", "img2.png", "img1.png"]일 경우, 일반적인 정렬은 ["img1.png", "img10.png", "img12.png", "img2.png"] 순이 되지만, 숫자..

[프로그래머스] 섬 연결하기 [내부링크]

문제 설명 n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요. 다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다. 예를 들어 A 섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A 섬과 C 섬은 서로 통행 가능합니다. 제한사항 섬의 개수 n은 1 이상 100 이하입니다. costs의 길이는 ((n-1) * n) / 2이하입니다. 임의의 i에 대해, costs[i][0] 와 costs[i] [1]에는 다리가 연결되는 두 섬의 번호가 들어있고, costs[i] [2]에는 이 두 섬을 연결하는 다리를 건설할 때 드는 비용입니다..

[백준] 5430번 : AC [내부링크]

문제 선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다. 함수 R은 배열에 있는 수의 순서를 뒤집는 함수이고, D는 첫 번째 수를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다. 함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "AB"는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다. 예를 들어, "RDD"는 배열을 뒤집은 다음 처음 두 수를 버리는 함수이다. 배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다. 각 테스트 케이..

[백준] 1717번 : 집합의 표현 [내부링크]

문제 초기에 {0}, {1}, {2}, ... {n} 이 각각 n+1개의 집합을 이루고 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작성하시오. 입력 첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 a가 포함되어 있는 집합과, b가 포함되어 있는 집합을 합친다는 의미이다. 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산은 1 a b의 형태로 입력이 주어진다. 이는 a와 b가 같은 집합에 포함되어 있는지를 확인하는 연산이다. a와..

[프로그래머스] 행렬의 곱셈 [내부링크]

문제 설명 2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요. 제한 조건 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다. 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다. 곱할 수 있는 배열만 주어집니다. 입출력 예 풀이 방법 행렬의 곱셈에 대한 문제로 이 문제를 풀기 위해서는 행렬의 값이 구해지는 과정을 살펴봐야 한다. 예를 들어, arr1이 3x4 행렬, arr2가 4x2 행렬이라면 결과값은 arr1의 행인 3, arr2의 열인 2가 합쳐져 3x2 행렬이 된다. arr[i][j]+=arr[i][k]*arr[k][j]; 라는 특성을 이용하여 풀 수 있다. 작성 코드 1 2 3 4 ..

[프로그래머스] N개의 최소공배수 [내부링크]

문제 설명 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요. 제한 사항 arr은 길이 1이상, 15이하인 배열입니다. arr의 원소는 100 이하인 자연수입니다. 입출력 예 풀이 방법 풀이가 잘 떠오르지 않아 힌트를 살펴보니 유클리드 호제법이라는 것을 이용한다고 한다. 이를 통해 최대공약수를 구한 후, 두 개의 곱을 최대공약수로 나누어 주면 된다. 작..

[백준] 15652번 : N과 M (4) [내부링크]

문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 고른 수열은 비내림차순이어야 한다. 길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다. 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 풀이 방법 중복으로 값이 사용이 되므로 중복순열이며, 동시에 비내림차순(오름차순)의 형태를 가지고 있..

[프로그래머스] 뉴스 클러스터링 [내부링크]

문제 설명 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브는 사용자들이 편리하게 다양한 뉴스를 찾아볼 수 있도록 문제점을 개선하는 업무를 맡게 되었다. 개발의 방향을 잡기 위해 튜브는 우선 최근 화제가 되고 있는 "카카오 신입 개발자 공채" 관련 기사를 검색해보았다. 카카오 첫 공채..'블라인드' 방식 채용 카카오, 합병 후 첫 공채.. 블라인드 전형으로 개발자 채용 카카오, 블라인드 전형으로 신입 개발자 공채 카카오 공채, 신입 개발자 코딩 능력만 본다 카카오, 신입 공채.. "코딩 실력만 본다" 카카오 "코딩 능력만으로 2018 신입 개발자 뽑는다" 기사의 제목을 기준으로 "..

[백준] 14503번 : 로봇 청소기 [내부링크]

문제 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 북쪽에서부터 r번째, 서쪽에서부터 c번째로 위치한 칸은 (r, c)로 나타낼 수 있다. 로봇 청소기는 다음과 같이 작동한다. 현재 위치를 청소한다. 현재 위치에서 다음을 반복하면서 인접한 칸을 탐색한다. 현재 위치의 바로 왼쪽에 아직 청소하지 않은 빈 공간이 존재한다면, 왼쪽 방향으로 회전한 다음 한 칸을 전진하고 1번으로 돌아간다. 그렇지 않을 경우, 왼쪽 방향으로 회전한다. 이때, ..

[백준] 2108번 : 통계학 [내부링크]

문제 수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자. 산술평균 : N개의 수들의 합을 N으로 나눈 값 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값 최빈값 : N개의 수들 중 가장 많이 나타나는 값 범위 : N개의 수들 중 최댓값과 최솟값의 차이 N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. 출력 첫째 줄에는 산술평균을 출력한다. 소수점 이하 ..

[백준] 2573번 : 빙산 [내부링크]

문제 지구 온난화로 인하여 북극의 빙산이 녹고 있다. 빙산을 그림 1과 같이 2차원 배열에 표시한다고 하자. 빙산의 각 부분별 높이 정보는 배열의 각 칸에 양의 정수로 저장된다. 빙산 이외의 바다에 해당되는 칸에는 0이 저장된다. 그림 1에서 빈칸은 모두 0으로 채워져 있다고 생각한다. 빙산의 높이는 바닷물에 많이 접해있는 부분에서 더 빨리 줄어들기 때문에, 배열에서 빙산의 각 부분에 해당되는 칸에 있는 높이는 일년마다 그 칸에 동서남북 네 방향으로 붙어있는 0이 저장된 칸의 개수만큼 줄어든다. 단, 각 칸에 저장된 높이는 0보다 더 줄어들지 않는다. 바닷물은 호수처럼 빙산에 둘러싸여 있을 수도 있다. 따라서 그림 1의 빙산은 일년후에 그림 2와 같이 변형된다. 그림 3은 그림 1의 빙산이 2년 후에 변..

[프로그래머스] 튜플 [내부링크]

문제 설명 셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수 있습니다. (a1, a2, a3, ..., an) 튜플은 다음과 같은 성질을 가지고 있습니다. 중복된 원소가 있을 수 있습니다. ex : (2, 3, 1, 2) 원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서로 다른 튜플입니다. ex : (1, 2, 3) ≠ (1, 3, 2) 튜플의 원소 개수는 유한합니다. 원소의 개수가 n개이고, 중복되는 원소가 없는 튜플 (a1, a2, a3, ..., an)이 주어질 때(단, a1, a2, ..., an은 자연수), 이는 다음과 같이 집합 기호 '{', '}'..

[프로그래머스] 전력망을 둘로 나누기 [내부링크]

문제 설명 n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결되어 있습니다. 당신은 이 전선들 중 하나를 끊어서 현재의 전력망 네트워크를 2개로 분할하려고 합니다. 이때, 두 전력망이 갖게 되는 송전탑의 개수를 최대한 비슷하게 맞추고자 합니다. 송전탑의 개수 n, 그리고 전선 정보 wires가 매개변수로 주어집니다. 전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷하도록 두 전력망으로 나누었을 때, 두 전력망이 가지고 있는 송전탑 개수의 차이(절대값)를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 2 이상 100 이하인 자연수입니다. wires는 길이가 n-1인 정수형 2차원 배열입니다. wires의 각 원소는 [v1, v2] 2개의 자연수로 이루어져 있으며, 이는 전력망의..

[프로그래머스] 쿼트압축 후 개수 세기 [내부링크]

문제 설명 0과 1로 이루어진 2n x 2n 크기의 2차원 정수 배열 arr이 있습니다. 당신은 이 arr을 쿼드 트리와 같은 방식으로 압축하고자 합니다. 구체적인 방식은 다음과 같습니다. 당신이 압축하고자 하는 특정 영역을 S라고 정의합니다. 만약 S 내부에 있는 모든 수가 같은 값이라면, S를 해당 수 하나로 압축시킵니다. 그렇지 않다면, S를 정확히 4개의 균일한 정사각형 영역(입출력 예를 참고해주시기 바랍니다.)으로 쪼갠 뒤, 각 정사각형 영역에 대해 같은 방식의 압축을 시도합니다. arr이 매개변수로 주어집니다. 위와 같은 방식으로 arr을 압축했을 때, 배열에 최종적으로 남는 0의 개수와 1의 개수를 배열에 담아서 return 하도록 solution 함수를 완성해주세요. 제한사항 arr의 행의..

[프로그래머스] 방문 길이 [내부링크]

문제 설명 게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다. U: 위쪽으로 한 칸 가기 D: 아래쪽으로 한 칸 가기 R: 오른쪽으로 한 칸 가기 L: 왼쪽으로 한 칸 가기 캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다. 예를 들어, "ULURRDLLU"로 명령했다면 1번 명령어부터 7번 명령어까지 다음과 같이 움직입니다. 8번 명령어부터 9번 명령어까지 다음과 같이 움직입니다. 이때, 우리는 게임 캐릭터가 지나간 길 중 캐릭터가 처음 걸어본 길의 길이를 구하려고 합니다. 예를 들어 위의 예시에서 게임 캐릭터가 움직인 길이는 9이지만,..

[프로그래머스] 배달 [내부링크]

문제 설명 N개의 마을로 이루어진 나라가 있습니다. 이 나라의 각 마을에는 1부터 N까지의 번호가 각각 하나씩 부여되어 있습니다. 각 마을은 양방향으로 통행할 수 있는 도로로 연결되어 있는데, 서로 다른 마을 간에 이동할 때는 이 도로를 지나야 합니다. 도로를 지날 때 걸리는 시간은 도로별로 다릅니다. 현재 1번 마을에 있는 음식점에서 각 마을로 음식 배달을 하려고 합니다. 각 마을로부터 음식 주문을 받으려고 하는데, N개의 마을 중에서 K 시간 이하로 배달이 가능한 마을에서만 주문을 받으려고 합니다. 다음은 N = 5, K = 3인 경우의 예시입니다. 위 그림에서 1번 마을에 있는 음식점은 [1, 2, 4, 5] 번 마을까지는 3 이하의 시간에 배달할 수 있습니다. 그러나 3번 마을까지는 3시간 이내로..

[Java] 다익스트라(Dijkstra) 알고리즘 [내부링크]

최단 경로란? - 그래프에서 두 정점 사이의 경로들 중에서 간선의 가중치의 합이 최소인 경로 다익스트라 알고리즘 - 하나의 시작 정점에서 끝 정점까지 최단경로를 구하는 알고리즘 예를 들어 아래와 같은 도형이 입력받는다고 가정하자. 이를 입력으로 나타내면 아래와 같다. 6 9 (노드의 개수, 간선의 개수) 0 1 50 (출발지점, 도착지점, 비용) 0 2 30 1 3 30 1 4 70 2 3 20 2 4 40 3 4 10 3 5 80 4 5 30 이를 코드로 구현해보자. 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 29 30 31 32 33 34 35 36 37 38 39 40 import java.io.*; impo..

[백준] 1021번 : 회전하는 큐 [내부링크]

문제 지민이는 N개의 원소를 포함하고 있는 양방향 순환 큐를 가지고 있다. 지민이는 이 큐에서 몇 개의 원소를 뽑아내려고 한다. 지민이는 이 큐에서 다음과 같은 3가지 연산을 수행할 수 있다. 첫 번째 원소를 뽑아낸다. 이 연산을 수행하면, 원래 큐의 원소가 a1, ..., ak이었던 것이 a2, ..., ak와 같이 된다. 왼쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 a2, ..., ak, a1이 된다. 오른쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 ak, a1, ..., ak-1이 된다. 큐에 처음에 포함되어 있던 수 N이 주어진다. 그리고 지민이가 뽑아내려고 하는 원소의 위치가 주어진다. (이 위치는 가장 처음 큐에서의 위치이다.) 이때, 그..

[프로그래머스] 행렬 테두리 회전하기 [내부링크]

문제 설명 rows x columns 크기인 행렬이 있습니다. 행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다. 이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다. 각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현하며, 그 의미는 다음과 같습니다. x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전합니다. 다음은 6 x 6 크기 행렬의 예시입니다. 이 행렬에 (2, 2, 5, 4) 회전을 적용하면, 아래 그림과 같이 2행 2열부터 5행 4열까지 영역의 테두리가 시계방향으로 회전합니다. 이때, 중앙의 15와 21이 있는 영역은..

[백준] 14890번 : 경사로 [내부링크]

문제 크기가 N×N인 지도가 있다. 지도의 각 칸에는 그 곳의 높이가 적혀져 있다. 오늘은 이 지도에서 지나갈 수 있는 길이 몇 개 있는지 알아보려고 한다. 길이란 한 행 또는 한 열 전부를 나타내며, 한쪽 끝에서 다른쪽 끝까지 지나가는 것이다. 다음과 같은 N=6인 경우 지도를 살펴보자. 이때, 길은 총 2N개가 있으며, 아래와 같다. 길을 지나갈 수 있으려면 길에 속한 모든 칸의 높이가 모두 같아야 한다. 또는, 경사로를 놓아서 지나갈 수 있는 길을 만들 수 있다. 경사로는 높이가 항상 1이며, 길이는 L이다. 또, 개수는 매우 많아 부족할 일이 없다. 경사로는 낮은 칸과 높은 칸을 연결하며, 아래와 같은 조건을 만족해야한다. 경사로는 낮은 칸에 놓으며, L개의 연속된 칸에 경사로의 바닥이 모두 접해..

[백준] 14500번 : 테트로미노 [내부링크]

문제 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 정수가 하나 쓰여 있다. 테트로미노 하나를 적절히 놓아서 테트로미노가 놓인 칸에 쓰여 있는 수들의 합을 최대로 하는 프로그램을 작성하시오. 테트로미노는 반드시 한 정사각형이 정확히 하나의 칸을 포함하도록 놓아야 하며, 회..

[백준] 2563번 : 색종이 [내부링크]

문제 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오. 예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다. 입력 첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래..

[백준] 8979번 : 올림픽 [내부링크]

문제 올림픽은 참가에 의의가 있기에 공식적으로는 국가간 순위를 정하지 않는다. 그러나, 많은 사람들이 자신의 국가가 얼마나 잘 하는지에 관심이 많기 때문에 비공식적으로는 국가간 순위를 정하고 있다. 두 나라가 각각 얻은 금, 은, 동메달 수가 주어지면, 보통 다음 규칙을 따라 어느 나라가 더 잘했는지 결정한다. 금메달 수가 더 많은 나라 금메달 수가 같으면, 은메달 수가 더 많은 나라 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라 각 국가는 1부터 N 사이의 정수로 표현된다. 한 국가의 등수는 (자신보다 더 잘한 나라 수) + 1로 정의된다. 만약 두 나라가 금, 은, 동메달 수가 모두 같다면 두 나라의 등수는 같다. 예를 들어, 1번 국가가 금메달 1개, 은메달 1개를 얻었고, 2번 국가와..

[백준] 1063번 : 킹 [내부링크]

문제 8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 행을 상징한다. 열은 가장 왼쪽 열이 A이고, 가장 오른쪽 열이 H까지 이고, 행은 가장 아래가 1이고 가장 위가 8이다. 예를 들어, 왼쪽 아래 코너는 A1이고, 그 오른쪽 칸은 B1이다. 킹은 다음과 같이 움직일 수 있다. R : 한 칸 오른쪽으로 L : 한 칸 왼쪽으로 B : 한 칸 아래로 T : 한 칸 위로 RT : 오른쪽 위 대각선으로 LT : 왼쪽 위 대각선으로 RB : 오른쪽 아래 대각선으로 LB : 왼쪽 아래 대각선으로 체스판에는 돌이 하나 있는데, 돌과 같은 곳으로 이동할 때는, 돌을 킹이 움직..

[백준] 2980번 : 도로와 신호등 [내부링크]

문제 상근이는 트럭을 가지고 긴 일직선 도로를 운전하고 있다. 도로에는 신호등이 설치되어 있다. 상근이는 각 신호등에 대해서 빨간 불이 지속되는 시간과 초록 불이 지속되는 시간을 미리 구해왔다. (빨강색과 초록색 불빛은 무한히 반복된다) 상근이의 트럭이 도로에 진입했을 때, 모든 신호등의 색상은 빨간색이고, 사이클이 막 시작한 상태이다. 상근이는 1초에 1미터를 움직인다. 신호등의 색상이 빨간색인 경우에는 그 자리에서 멈추고 초록색으로 바뀔때 까지 기다린다. 상근이가 도로의 끝까지 이동하는데 걸리는 시간을 구하는 프로그램을 작성하시오. 도로의 시작은 0미터이고, 끝은 L미터인 지점이다. 입력 첫째 줄에 신호등의 개수 N과 도로의 길이 L이 주어진다. (1 ≤ N ≤ 100, 1 ≤ L ≤ 1000) 다음..

[백준] 3048번 : 개미 [내부링크]

문제 개미가 일렬로 이동할 때, 가장 앞의 개미를 제외한 나머지 개미는 모두 앞에 개미가 한 마리씩 있다. 서로 반대 방향으로 이동하던 두 개미 그룹이 좁은 길에서 만났을 때, 개미는 어떻게 지나갈까? 최근 연구에 의하면 위와 같은 상황이 벌어지면 개미는 서로를 점프해서 넘어간다고 한다. 즉, 두 그룹이 만났을 때, 1초에 한번씩 개미는 서로를 뛰어 넘는다. (한 개미가 다른 개미를 뛰어 넘고, 다른 개미는 그냥 전진한다고 생각해도 된다) 하지만 모든 개미가 점프를 하는 것은 아니다. 자신의 앞에 반대 방향으로 움직이던 개미가 있는 경우에만 점프를 하게 된다. 첫 번째 그룹이 ABC로 움직이고, 두 번째 그룹의 개미가 DEF순으로 움직인다고 하자. 그럼, 좁은 길에서 만났을 때, 개미의 순서는 CBADE..

[백준] 16943번 : 숫자 재배치 [내부링크]

문제 두 정수 A와 B가 있을 때, A에 포함된 숫자의 순서를 섞어서 새로운 수 C를 만들려고 한다. 즉, C는 A의 순열 중 하나가 되어야 한다. 가능한 C 중에서 B보다 작으면서, 가장 큰 값을 구해보자. C는 0으로 시작하면 안 된다. 입력 첫째 줄에 두 정수 A와 B가 주어진다. 출력 B보다 작은 C중에서 가장 큰 값을 출력한다. 그러한 C가 없는 경우에는 -1을 출력한다. 제한 1 ≤ A, B < 109 풀이 방법 A 숫자의 배치를 바꿈으로써, B에 가장 근접한 수를 찾기 위해서 A를 순열로써 탐색을 해야한다. 또한, 완성된 숫자의 첫번째 값이 0이여서는 안되고, B보다는 작아야 되므로 추가적인 조건이 필요하다. 작성 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1..

Spring Boot & MySQL 연동하기 [내부링크]

1. 아래 링크를 통해 버전에 맞는 MySQL 다운로드 https://dev.mysql.com/downloads/mysql/ MySQL :: Download MySQL Community Server Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris macOS Source Code Select OS Version: All Windows (x86 dev.mysql.com 2. MySQL Schema 생성..

[백준] 8979번 : 올림픽 [내부링크]

https://www.acmicpc.net/problem/8979 8979번: 올림픽 입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각 www.acmicpc.net 문제 올림픽은 참가에 의의가 있기에 공식적으로는 국가간 순위를 정하지 않는다. 그러나, 많은 사람들이 자신의 국가가 얼마나 잘 하는지에 관심이 많기 때문에 비공식적으로는 국가간 순위를 정하고 있다. 두 나라가 각각 얻은 금, 은, 동메달 수가 주어지면, 보통 다음 규칙을 따라 어느 나라가 더 잘했는지 결정한다. 금메달 수가 더 많은 나라 금메달 수가 같으면, 은메달 수가 더 ..

[프로그래머스] Oracle : JOIN [내부링크]

없어진 기록 찾기 - ANIMAL_OUTS 테이블에는 있고, ANIMAL_INS 테이블에는 없는 정보를 찾아야 하므로 두 테이블을 조인할 때 외부조인을 이용하고 ANIMAL_INS의 정보가 모두 나타나도록 한것 중에서 ANIMAL_INS의 아이디가 유실된 것을 조회하면 된다. SELECT O.ANIMAL_ID, O.NAME FROM ANIMAL_INS I, ANIMAL_OUTS O WHERE I.ANIMAL_ID(+)=O.ANIMAL_ID AND I.ANIMAL_ID IS NULL ORDER BY 1; 있었는데요 없었습니다 - 보호 시작일과 입양일을 비교해야 하는 조건에서 ANIMAL_ID는 동일하고 보호 시작일은 ANIMAL_INS 테이블의 DATETIME, 입양일은 ANIMAL_OUTS의 DATETI..

[프로그래머스] 신규 아이디 추천 [내부링크]

문제 설명 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다. 다음은 카카오 아이디의 규칙입니다. 아이디의 길이는 3자 이상 15자 이하여야 합니다. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다. "네오"는 다음과 같이 7단계의 순차적인 처리 과정을 통해 신규 유저가 입력한 아이..

[프로그래머스] 네트워크 [내부링크]

문제 설명 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 제한사항 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다. 각 컴퓨터는 0부터 n-1인 정수로 표현합니다. i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[..

[프로그래머스] 타겟 넘버 [내부링크]

문제 설명 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 주어지는 숫자의 개수는 2개 이상 20개 이하입니다. 각 숫자는 1 이상 50 이하인 자연수입니다. 타겟 넘버는 1 이상 1000 이하인 자연수입니다. ..

[프로그래머스] 구명보트 [내부링크]

문제 설명 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다. 구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다. 사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return 하도록 solution 함수를 작성해주세요..

[프로그래머스] 큰 수 만들기 [내부링크]

문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한 조건 number는 1자리 이상, 1,000,000자리 이하인 숫자입니다. k는 1 이상 number의 자릿수 미만인 자연수입니다. 입출력 예 풀이 방법 문자열을 연결할 때 StringBuilder..

[프로그래머스] Oracle : String, Date [내부링크]

루시와 엘라 찾기 - 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하기 위해 select 이후의 행을 입력한 후, 해당하는 NAME에 맞는 결과를 WHERE문을 통해 조회하였다. 아이디 순으로 조회하므로 ORDER BY 1(첫번째 행); (오름차순은 생략가능)을 통해 조회한다. SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE NAME='Lucy' OR NAME='Ella' OR NAME='Pickle' OR NAME='Rogan' OR NAME='Sabrina' OR NAME='Mitty' ORDER BY 1; 이름에 el이 들어가는 동물 찾기 - 이름에 "EL"이 들어가는 개를 찾는 문제이므로 LIKE '%EL%' (%는 공백 또는 문..

[프로그래머스] Oracle : IS NULL [내부링크]

이름이 없는 동물의 아이디 - 동물의 아이디에 대한 결과 중 이름이 없는 것에 대한 결과는 WHERE문을 통해 NAME IS NULL인 경우를 찾으면 된다. 아이디에 대한 오름차순 정렬이므로 ORDER BY 절을 이어서 작성한다. SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL ORDER BY 1 ASC; 이름이 있는 동물의 아이디 - 이전문제와 반대로 이름이 있는 것에 대한 결과이므로 NAME IS NOT NULL의 경우에 해당한다. SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY 1 ASC; NULL 처리하기 - 값이 Null인 경우 치환하는 함수인 NVL()는 NVL(ex1, ex2) :..

[프로그래머스] Oracle : GROUP BY [내부링크]

고양이와 개는 몇 마리 있을까 - 동물의 타입과 타입별로의 count를 구하는 문제이다. 이때 Group By절에는 집계함수외의 행들이 들어가야 하고, 고양이를 먼저 조회해달라 했으므로 오름차순으로 정렬한다. SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) as count FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY 1 asc; 동명 동물 수 찾기 - 동물의 이름과 count를 조회하고, 이 중 동물 이름이 2번 이상 쓰인 이름을 조회해야 하므로 그룹함수의 조건절인 HAVING을 통해 작성한다. 또한 이름 순으로 조회하므로 ORDER BY로 마무리한다. SELECT NAME,COUNT(NAME) as COUNT FROM ANIMAL_INS WHE..

[프로그래머스] Oracle : SUM, MAX, MIN [내부링크]

최댓값 구하기 - 가장 최근에 들어왔다면 DATETIME이 가장 늦은 상태의 값을 구하는 것이므로 집계함수의 MAX를 이용하여 답을 구하면 된다. SELECT MAX(DATETIME) as 시간 FROM ANIMAL_INS; 최솟값 구하기 SELECT MIN(DATETIME) AS 시간 FROM ANIMAL_INS; 동물 수 구하기 - 동물의 수를 구하려면 동물마다 고유하게 구별할 수 있는 FK가 있어야 하는데 테이블에서 확인할 수 있는 바로는 ANIMAL_ID가 FK로 판단되어 이를 통하여 값을 구하였다. SELECT COUNT(ANIMAL_ID) AS count FROM ANIMAL_INS; 중복 제거하기 - 중복을 제거하기 위해서는 DISTINCT 키워드를 사용해야 하고, 이 중에서 NAME은 NU..

[프로그래머스] 조이스틱 [내부링크]

문제 설명 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. - 다음 알파벳 - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로) - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서) - 커서를 오른쪽으로 이동 예를 들어 아래의 방법으로 "JAZ"를 만들 수 있습니다. - 첫 번째 위치에서 조이스틱을 위로 9번 조작하여 J를 완성합니다. - 조이스틱을 왼쪽으로 1번 조작하여 커서를 마지막 문자 위치로 이동시킵니다. - 마지막 위치에서 조이스틱을 아래로 1번 조작하여 Z를 완성합니다. 따라서 11번 이동시켜 "JAZ"를 ..

[프로그래머스] 체육복 [내부링크]

문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를..

[프로그래머스] 카펫 [내부링크]

문제 설명 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다. 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다. 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 ..

[프로그래머스] Oracle : SELECT [내부링크]

모든 레코드 조회하기 ~순으로 정렬을 하기 위해서는 ORDER BY를 이용해야 하며, ANIMAL_ID순으로의 정렬이므로 아래와 같이 입력하면 된다. SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID; 역순 정렬하기 SELECT 뒤에 조회할 행인 이름과 보호 시작일을 기입하고, 역순으로의 정렬이므로 DESC를 이용한다. 기본형인 ASC는 순차정렬로 생략이 가능하다. SELECT NAME,DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC; 아픈 동물 찾기 동물 중에서 아픈 동물에 해당하는 동물은 INTAKE_CONDITION이 Sick인 경우이다. 따라서 조건에 해당하는 WHERE절을 사용한 뒤, 아이디 순으로 조회이므로 ORDER BY 1..

[프로그래머스] 소수 찾기 [내부링크]

문제 설명 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers는 길이 1 이상 7 이하인 문자열입니다. numbers는 0~9까지 숫자만으로 이루어져 있습니다. "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다. 입출력 예 입출력 예 설명 예제 #1 [1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다. 예제 #2 [0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다. 11과 011은 같은 숫..

[프로그래머스] 모의고사 [내부링크]

문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작..

[프로그래머스] H-Index [내부링크]

문제 설명 H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다. 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요. 제한사항 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다. 논문별 인용 횟수는 0회 이상 10,000회 이하입니다. 입출력 예 입출력 예 설명 이 과학..

[프로그래머스] 가장 큰 수 [내부링크]

문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한 사항 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다. 입출력 예 풀이 방법 문자열을 이어붙여 나가면서 크기..

[프로그래머스] K번째수 [내부링크]

문제 설명 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면 array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다. 2에서 나온 배열의 3번째 숫자는 5입니다. 배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 array의 길이는 1 이상 100 이하입니다. a..

[Java] 스택(Stack), 큐(Queue) [내부링크]

스택(Stack) Stack의 사전적 정의는 '쌓다', '더미'라는 뜻으로, 택배 상하차를 할 때를 떠올리면 된다. 상자를 올릴 때는 위로 쌓아올리고, 물건을 내릴 때는 가장 위의 상자부터 내리는 구조와 같다. 즉 Stack은 LIFO(Last In First Out)의 구조로, 마지막에 들어간 값이 가장 먼저 출력되는 구조를 띄고 있다. Stack의 사용 - 값을 입력할 때는 push() 사용 - 값을 출력할 때는 pop() 사용 - 값을 출력하지 않고 가장 마지막의 값을 확인하고 싶을 때는 peek() 함수 이용 출력 결과 -> 가장 마지막에 입력된 값이 가장 먼저 출력되는 역순의 구조를 띄고 있다. 큐(Queue) Queue의 사전적 의미는 줄을 서서 기다리는 것을 의미하는데 매장에서 물건을 구입하..

[프로그래머스] 더 맵게 [내부링크]

문제 설명 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요. 제한 사항 scovil..

[프로그래머스] 주식가격 [내부링크]

문제 설명 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. prices의 길이는 2 이상 100,000 이하입니다. 입출력 예 입출력 예 설명 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다. 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다. 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다. 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다. 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다. 풀이 방법 마지막 배열의 인덱스를 제외하고 나..

[프로그래머스] 다리를 지나는 트럭 [내부링크]

문제 설명 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다. 예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다. solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 수 bridge_length, 다리가 견딜 수 있..

[프로그래머스] 프린터 [내부링크]

문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 ..

[프로그래머스] 기능개발 [내부링크]

문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 제한 사항 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. 작업 진도는 100 미만의 자연수입니다. 작업 속도는 100 이하의 자..

[프로그래머스] 위장 [내부링크]

문제 설명 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. clothe..

[프로그래머스] 전화번호 목록 [내부링크]

문제 설명 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 제한 사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해서 들어있지 않습니다. 입출력 예제 입출..

[프로그래머스] 완주하지 못한 선수 [내부링크]

문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예 입출력 예 설명 예제 #1 "leo"는 참여자 명단에는 있지만, 완주자 명단..

[Java] 순열(Permutation), 조합(Combination) [내부링크]

순열 순열이란 n개의 값 중에서 r개의 숫자를 순서를 고려해서 뽑는 경우를 말한다. ex) 1, 2, 3의 3개의 배열 중에서 3개를 뽑는 경우 -> [1, 2, 3]과 [1, 3, 2]는 다른 것으로 처리한다. Java Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public static void permutation(int arr[], int output[], boolean visited[], int depth, int r){ if(depth==r){ for(int i=0;i

[백준] 1476번 : 날짜 계산 [내부링크]

https://www.acmicpc.net/problem/1476 1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 문제 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타내는 수를 E, 태양을 나타내는 수를 S, 달을 나타내는 수를 M이라고 했을 때, 이 세 수는 서로 다른 범위를 가진다. (1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19) 우리가 알고있는 1년은 ..

[백준] 1182번 : 부분수열의 합 [내부링크]

https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 문제 N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은..

[백준] 14889번 : 스타트와 링크 [내부링크]

https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 문제 오늘은 스타트링크에 다니는 사람들이 모여서 축구를 해보려고 한다. 축구는 평일 오후에 하고 의무 참석도 아니다. 축구를 하기 위해 모인 사람은 총 N명이고 신기하게도 N은 짝수이다. 이제 N/2명으로 이루어진 스타트 팀과 링크 팀으로 사람들을 나눠야 한다. BOJ를 운영하는 회사 답게 사람에게 번호를 1부터 N까지로 배정했고, 아래와 같은 능력치를 조사했다. 능력치 Sij는 i번 사람과 j번 사람이 같은 팀에 속..

[백준] 14888번 : 연산자 끼워넣기 [내부링크]

https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 문제 N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다...

[백준] 1436번 : 영화감독 숌 [내부링크]

https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net 문제 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, ..

[백준] 14501번 : 퇴사 [내부링크]

https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 문제 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. 오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다. 백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다. 각각의 상담은 상담을 완료하는데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다. N = 7인 경우에 다음과 같은 상담 일정표를 보자. 1일에 잡혀있는 상담은 총 3일이 걸리며, 상담했을 때 받을 수 있는 금액은 10이다. 5일에 ..

[백준] 9663번 : N-Queen [내부링크]

https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (1 ≤ N < 15) 출력 첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다. 풀이 방법 퀸은 일직선이나 대각선으로 모두 공격이 가능하다. 배열에서 판별하려면 행과 열의 범위 조정을..

[백준] 1018번 : 체스판 다시 칠하기 [내부링크]

https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 문제 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은..

[백준] 2309번 : 일곱 난쟁이 [내부링크]

https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 문제 왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다. 아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다. 아홉 난쟁이의 키가 주어졌을 때, 백설공주를 ..

[백준] 7568번 : 덩치 [내부링크]

https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 문제 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 ..

[백준] 2231번 : 분해합 [내부링크]

https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연..

[백준] 2798번 : 블랙잭 [내부링크]

https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, ..

[백준] 4673번 : 셀프 넘버 [내부링크]

https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 ..

[백준] 1065번 : 한수 [내부링크]

https://www.acmicpc.net/problem/1065 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 문제 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다. 출력 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다. ..

[백준] 2644번 : 촌수계산 [내부링크]

https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 문제 우리 나라는 가족 혹은 친척들 사이의 관계를 촌수라는 단위로 표현하는 독특한 문화를 가지고 있다. 이러한 촌수는 다음과 같은 방식으로 계산된다. 기본적으로 부모와 자식 사이를 1촌으로 정의하고 이로부터 사람들 간의 촌수를 계산한다. 예를 들면 나와 아버지, 아버지와 할아버지는 각각 1촌으로 나와 할아버지는 2촌이 되고, 아버지 형제들과 할아버지는 1촌, 나와 아버지 형제들..

[백준] 11725번 : 트리의 부모 찾기 [내부링크]

https://www.acmicpc.net/problem/11725 11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다. 출력 첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다. 풀이 방법 List[]와 배열을 합해서 트리를 작성한다. 양방향 그래프를 활용하여 노드를 연결한..

[백준] 2583번 : 영역 구하기 [내부링크]

이전에도 말했다시피 x,y좌표 값으로 주어지고 배열에 입력할 때에는 arr[y][x]형태로 입력이 된다. x값이 가로, y값이 세로를 의미하기 때문이다. 따라서, 이점에 먼저 유의를 하고, 인접한 것들은 같은 영역으로 분류를 하므로 D[][]를 통해 검사하여 영역을 구하면 된다. https://www.acmicpc.net/problem/2583 2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오 www.acmicpc.net 문제 눈금의 간격이 1인 M×N(M,N≤100)크기의 모눈종이가 있다. 이 모눈종이 위에 눈금에 맞..

[백준] 2206번 : 벽 부수고 이동하기 [내부링크]

https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 문제 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이때 시작하는 칸과 끝나는 칸도 포함해서 센다. 만약에 이동하는 도중에 한..

[백준] 7562번 : 나이트의 이동 [내부링크]

https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net 문제 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까? 입력 입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l..

[백준] 7569번 : 토마토 [내부링크]

https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자모양 상자의 칸에 하나씩 넣은 다음, 상자들을 수직으로 쌓아 올려서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 ..

[백준] 10026번 : 적록색약 [내부링크]

https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글자는 같은..

[백준] 1987번 : 알파벳 [내부링크]

https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 문제 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다. 좌측 ..

[백준] 2468번 : 안전 영역 [내부링크]

https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 문제 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 안전한 영역이 최대로 몇 개가 만들어 지는 지를 조사하려고 한다. 이때, 문제를 간단하게 하기 위하여, 장마철에 내리는 비의 양에 따라 일정한 높이 이하의 모든 지점은 물에 잠긴다고 가정한다. 어떤 지역의 높이 정..

[백준] 4963번 : 섬의 개수 [내부링크]

https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 문제 정사각형으로 이루어져 있는 섬과 바다 지도가 주어진다. 섬의 개수를 세는 프로그램을 작성하시오. 한 정사각형과 가로, 세로 또는 대각선으로 연결되어 있는 사각형은 걸어갈 수 있는 사각형이다. 두 정사각형이 같은 섬에 있으려면, 한 정사각형에서 다른 정사각형으로 걸어서 갈 수 있는 경로가 있어야 한다. 지도는 바다로 둘러싸여 있으며, 지도 밖으로 나갈 수 없다. 입력 입력은 여러 개의 테..

[백준] 14502번 : 연구소 [내부링크]

https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 문제 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하..

[백준] 11724번 : 연결 요소의 개수 [내부링크]

https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 문제 방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤..

[백준] 1697번 : 숨바꼭질 [내부링크]

https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의..

[백준] 7576번 : 토마토 [내부링크]

https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 ..

[백준] 1012번 : 유기농 배추 [내부링크]

https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 문제 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어,..

[백준] 2606번 : 바이러스 [내부링크]

https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 문제 신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다. 예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 ..

[백준] 2667번 : 단지번호붙이기 [내부링크]

https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고..

[백준] 2178번 : 미로 탐색 [내부링크]

https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 문제 N×M크기의 배열로 표현되는 미로가 있다. 1 0 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 ..

[Java] 자바 컬렉션들의 시간 복잡도 (Big O) [내부링크]

Java Collection 인터페이스 특징 구현클래스 List 순서가 있는 데이터의 집합, 데이터의 중복을 허용 ArrayList, LinkedList, Stack, Vector Set 객체의 순서가 없으며, 데이터의 중복을 허용하지 않음 HashSet, TreeSet, EnumSet Queue 객체를 입력한 순서대로 저장되며, 데이터의 중복을 허용 PriorityQueue, DelayQueue, LinkedList Map 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합 순서가 없으며, 키는 중복을 허용하지 않으며 값은 중복을 허용 HashMap, TreeMap, HashTable, Properties List Add Remove Get Contains Data Structure Arra..

[백준] 1744번 : 수 묶기 [내부링크]

https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 문제 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 상관없이 묶을 수 있다. 하지만, 같은 위치에 있는 수(자기 자신)를 묶는 것은 불가능하다. 그리고 어떤 수를 묶게 되면, 수열의 합을 구할 때 묶은 수는 서로 곱한 후에 더한다. 예를 들면, ..

[백준] 1439번 : 뒤집기 [내부링크]

https://www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net 문제 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다. 예를 들어 S=0001100 일 때, 전체를 뒤집으면 1110011이 된다. 4번째 문자부터 5번째 문자까지 뒤집으면..

[백준] 4796번 : 캠핑 [내부링크]

https://www.acmicpc.net/problem/4796 4796번: 캠핑 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다. www.acmicpc.net 문제 등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다. 캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다. 강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까? 강산이는 조금 더 일반화해서 문제를 풀려고 한다. 캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이..

[백준] 1715번 : 카드 정렬하기 [내부링크]

https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 문제 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장의 숫자 카드 묶음을 합치려면 50번의 비교가 필요하다. 매우 많은 숫자 카드 묶음이 책상 위에 놓여 있다. 이들을 두 묶음씩 골라 서로 합쳐나간다면, 고르는 순서에 따라서 비..

[백준] 1339번 : 단어 수학 [내부링크]

https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 문제 민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다. 단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다. 같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다. 예를 들어, GCF + ACDEB를 계..

[백준] 13305번 : 주유소 [내부링크]

https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 문제 어떤 나라에 N개의 도시가 있다. 이 도시들은 일직선 도로 위에 있다. 편의상 일직선을 수평 방향으로 두자. 제일 왼쪽의 도시에서 제일 오른쪽의 도시로 자동차를 이용하여 이동하려고 한다. 인접한 두 도시 사이의 도로들은 서로 길이가 다를 수 있다. 도로 길이의 단위는 km를 사용한다. 처음 출발할 때 자동차에는 기름이 없어서 주유소에서 기름을 넣고 출발하여야 한다. 기름통의 크..

[백준] 1946번 : 신입 사원 [내부링크]

https://www.acmicpc.net/problem/1946 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 문제 언제나 최고만을 지향하는 굴지의 대기업 진영 주식회사가 신규 사원 채용을 실시한다. 인재 선발 시험은 1차 서류심사와 2차 면접시험으로 이루어진다. 최고만을 지향한다는 기업의 이념에 따라 그들은 최고의 인재들만을 사원으로 선발하고 싶어 한다. 그래서 진영 주식회사는, 다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지..

[백준] 1541번 : 잃어버린 괄호 [내부링크]

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

[백준] 1931번 : 회의실 배정 [내부링크]

https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 10..

[백준] 1260번 : DFS와 BFS [내부링크]

https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 1..

[백준] 1080번 : 행렬 [내부링크]

https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 문제 0과 1로만 이루어진 행렬 A와 행렬 B가 있다. 이때, 행렬 A를 행렬 B로 바꾸는데 필요한 연산의 횟수의 최솟값을 구하는 프로그램을 작성하시오. 행렬을 변환하는 연산은 어떤 3×3크기의 부분 행렬에 있는 모든 원소를 뒤집는 것이다. (0 → 1, 1 → 0) 입력 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 ..

[백준] 16953번 : A -> B [내부링크]

https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 문제 정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다. 2를 곱한다. 1을 수의 가장 오른쪽에 추가한다. A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자. 입력 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. 출력 A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다. 풀이 방법 문제의 해결을 위해 A->B로 바꾸기 위해 많은 경우의 수를 고려해봤는데 답이 떠오르지 않았다. 다른 풀이를 약간 참고해보니 B로부터 A를 도출하는..

[JPA] 변경 감지와 병합 [내부링크]

준영속 엔티티란? - 영속성 컨텍스트가 더는 관리하지 않는 엔티티 - DB에 한번 저장되었기에 식별자가 존재하지 않아 JPA가 변경감지를 하지 않아 수정을 하여도 DB에 업데이트가 일어나지 않음 준영속 엔티티를 수정하는 방법 1. 변경 감지 기능 사용 2. 병합(merge) 사용 1. 변경감지 기능사용 (=Dirty Checking) -> 리파지토리에서 id를 기반으로 하여 데이터를 찾은 후, 값을 수정하는 방식이다. -> @Transactional에 의해 save 필요없이 커밋을 통해 변경감지하여 변경된 내용을 flush 한다. 2. 병합(merge) 사용 -> 객체를 생성한 뒤, save 하는 시점에 위와 같이 merge()를 해준다. merge의 단점 - 해당 모든 값들을 업데이트 하기 때문에 값이..

[JPA] 영속성 컨텍스트(EntityManager)와 엔티티의 생명주기 [내부링크]

영속성 컨텍스트(EntityManager)란? - "엔티티를 영구 저장하는 환경"이라는 뜻 - 눈에 보이지 않는 논리적인 개념 EntityManager.persist(entity); - 엔티티 매니저를 통해서 영속성 컨텍스트에 접근이 가능 - DB에 실제적인 저장이 아닌 엔티티를 영속성 컨텍스트에 저장하는 것이다. -> commit()을 하는 시점에 DB에 실제적인 업데이트가 된다. 엔티티의 생명주기 - 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 - 영속(managed) 영속성 컨텍스트에 관리되는 상태 - 준영속(detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 - 삭제(removed) 삭제된 상태 영속성 컨텍스트의 이점 - 1차 캐시 -> 아래와 같이 ..

[Java] 형 변환을 도와주는 다양한 메서드 [내부링크]

1. Object 형태를 String으로 변환 - String.valueOf(number)를 이용 출력 결과 - toString(number) 이용 출력 결과 String.valueOf() vs toString() 차이점 Object가 null일 때, toString() : Null PointerException(NPE)을 발생 String.valueOf() : null일때에도 null을 문자열로 취급하여 예외를 발생시키지 않음 따라서, NPE를 방지하기 위해서는 String.valueOf()를 사용하는 것이 좋다. 참고로 int형이 아닌 다른 형을 통해서도 String으로 변환가능 출력 결과 2. String형을 int로 변환 - Integer.pasreInt(문자열) 이용 출력 결과 3. String..

[JPA] 다양한 연관관계 매핑 - 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) [내부링크]

먼저 들어가기 전 테이블과 객체의 매핑 차이점을 알고 들어가야 한다. 테이블 - 외래키 하나로 양쪽 참조 가능 (조인) - 사실 방향이라는 개념이 없음 객체 - 참조용 필드가 있는 쪽으로만 참조 가능 - 한쪽만 참조하면 단방향 매핑 - 양쪽이 서로 참조하면 양방향 매핑 이제부터는 외래키를 관리하는 테이블을 연관관계 주인이라고 하겠다. 주인의 반대편에서는 외래키에 영향을 주지않고 조회만 가능 다대일 [N:1] - 관계형 DB에서는 다 쪽이 항상 연관관계 주인, 즉 외래키를 관리 따라서, 다 쪽에 외래키를 생성하는 것이 DB와의 관계를 고려하여 설계하는데 적합하다. Example) Member와 Team이 N:1의 관계를 가지고 있다고 가정하자. Member에서 Team으로의 단방향 매핑일 때 - 다(Mem..

Spring Error 정리하기 - 테스트 코드 작성시 [내부링크]

1. Error cause : com.sun.tools.javac.util.List Spring을 이용한 게시판을 복습하던 도중 Test 코드 작성시 아래와 같은 에러가 발생하였다. org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.sun.tools.javac.util.List with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.sun.tools.javac.util.List.() 문자의 원인은 예상치 못한 곳에서 발생했다. 마지막 줄에 보면 com.sun.tools.javac.util.List에 있다. 습관적으로 impor..

[Java] 정렬 Comparable vs Comparator 사용 [내부링크]

기본 지식 Arrays.sort() -> 일반적인 배열의 정렬시 사용 Collection.sort() -> 리스트의 정렬시 사용 그렇다면 Comparable & Comparator는 언제쓰일까?? 공통점 - 객체간의 비교시 사용 차이점 - Comparable 인터페이스 : 객체간의 기본 정렬기준이 필요할 때 사용 : compareTo(Type o) 메서드 구현을 통해 사용 : 매개변수가 하나인 이유? "자기 자신"과 하나의 매개변수를 비교 - Comparator 인터페이스 : 객체간의 특정한 정렬기준이 필요할 때 사용 : compare(Type o1, Type o2) 메서드 구현을 통해 사용 : 매개변수가 두개인 이유? 두개의 매개변수를 비교 예를들어, 위와 같은 number1, number2를 비교하는..

날 막지마 - 괴짜가족 오프닝 [내부링크]

(출처 : www.youtube.com/watch?v=85Kg4BUE0_g) 야 제발 저리좀 비켜 내 앞에 돌 좀 치워 되는게 하나 없는 궃은 날엔 건들지마 내버려둬 누구나 다 잘났다고 떠들고 나같은건 무시하고 욕하는데 기가 죽어 할말 못할 바보는 아냐 난 앞만 보고 갈래 내 앞 좀 막지마라 나라고 맨날 재수 없을까 오 건들지마 얼른 비켜 제발 나좀 내버려둬 야 제발 저리좀 비켜 내 앞에 돌 좀 치워 되는게 하나 없는 굳은 날엔 건들지마 내버려둬 누구나 다 잘났다고 떠들고 나같은건 무시하고 욕하는데 기가 죽어 할말 못할 바보는 아냐 나 앞만 보고 갈래 내 앞 좀 막지마라 나라고 맨날 재수 없을까 오! 건들지마 얼른 비켜 난 앞만 보고 갈래 내 앞 좀 막지마라 나라고 맨날 재수없을까 건들지마 얼른비켜 제발..

[Java] 흐름제어문 - continue, break, return [내부링크]

* continue문 - 현재 진행중인 루프를 중단하고 다음 루프로 건너뛰어 진행하도록 하는 구문 예시 구문 특징 : 위와 같이 i%5==0인 5와 10의 경우는 그 구문을 실행하지 않고 다음 작업을 실행 : 해당 루프를 벗어나지 않음 * break문 - 한번에 가장 가까운 하나의 Loop를 벗어날 때 사용하며 해당 루프 종료 후 다음 작업을 실행한다. 예시 구문 특징 : 현재 루프 종료 : 루프를 벗어난 문장 실행 * return문 - 메소드 안에서 사용하는 분기문으로 현재 수행 중인 메소드를 종료시키고, 메소드를 호출한 수행문의 위치로 분기 이동함 1. return; => 현재 메소드를 종료함 2. return 식; => 현재 메소드를 종료하면서 식의 값을 호출했던 곳으로 반환함 ex) int max..

[Java] BufferedReader, BufferedWriter 사용법 [내부링크]

기본 개념 - Scanner : 입력을 받을 경우, 공백(space)이나 Enter를 모두 경계로 인식함 nextInt(), next(), nextchar() 등 다양한 형식의 데이터 입력가능 - BufferedReader : Enter만 경계로 인식함 String로만 데이터 인식 장점 : 알고리즘의 시간을 줄일 수 있다. 형변환을 통한 BufferedReader 사용 방법 1. 공백을 포함하지 않는 Int형 1 2 3 4 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); int n = Integer.parseInt(br.readLine()); BufferedReader를 통한..

[Vue.js] 1.입문하기 - 소개 및 설치 [내부링크]

1. Vue.js 란? Vue.js - 웹 프론트엔드 프레임워크 - 컴포넌트 기반의 SPA(Single Page Application)를 구축할 수 있게 해주는 프레임워크 - 컴포넌트 : 웹을 구성하는 logo, menubar, button 등 웹 페이지 내의 다양한 UI 요소 : 재사용 가능하도록 구조화 한 것 - SPA : 하나의 페이지 안에서 필요한 영역부분만 로딩되는 형태 : 빠른 페이지 변환, 적은 트래픽 양 : 예를 들어 페이지의 좋아요 수가 변경되었을 때, 화면 전체가 로딩되는 형태가 아닌 필요한 부분만 변경할 수 있는 형태 2. Vue.js 설치하기 기존에는 atom 에디터를 사용하고 있었으나, 이번에는 visual studio code를 설치해서 사용해보기로 한다. 먼저, visual s..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 10장 [내부링크]

Chapter 10 24시간 365일 중단없는 서비스를 만들자 무중단 배포 소개 - 무중단 배포 : 서비스를 정지하지 않고, 배포할 수 있는 방법 대표적인 방법 : 엔진엑스, 도커, AWS에서 블루-그린 엔진엑스 설치와 스프링 부트 연동하기 엔진엑스 설치 - EC2에 엔진엑스 설치 sudo yum install nginx - 엔진엑스 실행 보안 그룹 추가 엔진엑스의 포트번호는 기본적으로 80 EC2->보안 그룹->EC2 보안그룹 선택->인바운드 편집으로 이동해 변경 리다이렉션 주소 추가 구글과 네이버 로그인에도 변경된 주소를 등록 -> 기존의 리디렉션 주소에 8080 제거해 추가 등록 추가한 이후, EC2의 도메인으로 접근하되 8080 포트를 제거하고 접근해보기 엔진엑스와 스프링 부트 연동 엔진엑스가 현..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 9장 [내부링크]

Chapter 09 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 CI & CD 소개 CI(Continuous Integration - 지속적 통합) : VCS 시스템에 PUSH가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정 CD(Continuous Deployment - 지속적인 배포) : 이 빌드 결과를 자동으로 운영서버에 무중단 배포까지 진행되는 과정 Travis CI 연동하기 - Travis CI 웹 서비스 설정 https://travis-ci.org/에서 깃허브 계정에 로그인 -> 오른쪽 위 계정명 -> Settings ->저장소 이름 찾아 상태바 활성화 - 프로젝트 설정 build.gradle과 같은 위치에서 .travis.yml 생성 cf..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 8장 [내부링크]

Chapter 08 EC2 서버에 프로젝트를 배포해 보자 EC2에 프로젝트 Clone 받기 - 먼저 깃허브에서 코드를 받아올 수 있도록 깃 설치 sudo yum install git - git clone으로 프로젝트를 저장할 디렉토리 생성 mkdir ~/app && mkdir ~/app/step1 - 생성된 디렉토리로 이동 cd ~/app/step1 - 본인의 깃허브 웹페이지에서 https 주소 복사 & git clone 복사한 주소 - 프로젝트로 이동해 파일들 확인 - 코드들이 잘 수행되는지 테스트 ./gradlew test 이상으로 깃을 통해 프로젝트를 클론과 풀까지 진행하였다. 배포 스크립트 만들기 쉘 스크립트를 통해 명령어들이 한번에 차례대로 실행되도록 한다. vim ~/app/step1/depo..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 7장 [내부링크]

Chapter 07 AWS에 데이터베이스 환경을 만들어보자 - AWS RDS RDS란? AWS에 지원하는 관리형 서비스로 클라우드 기반 관계형 데이터베이스 하드웨어 프로비저닝, 데이터베이스 설정, 패치 및 백업과 같이 잦은 운영 작업을 자동화하여 개발자가 개발에 집중할 수 있게 지원하는 서비스 RDS 인스턴스 생성하기 AWS 검색창에 rds -> 데이터베이스 생성 -> 엔진 유형 : Maria DB 선택 / 템플릿 : 프리 티어 나머지는 아래와 동일하게 작성 이후, DB를 생성하면 된다. RDS 운영환경에 맞는 파라미터 설정 왼쪽 탭에서 파라미터 그룹 -> 파라미터 그룹 생성 -> freelec-springboot2-webservice 이름으로 생성 -> 생성된 파라미터 그룹 선택 -> 파라미터 편집 -..

[Java] 코드업 (CodeUp) 자바 풀이 1091~1099 [내부링크]

#1091 문제 설명 어떤 규칙에 따라 수를 순서대로 나열한 것을 수열이라고 한다. 예를 들어 1 -1 3 -5 11 -21 43 ... 은 1부터 시작해 이전에 만든 수에 -2를 곱한 다음 1을 더해 다음 수를 만든 수열이다. 이런 이상한 수열을 알게 된 영일이는 또 궁금해졌다. "그럼.... 13번째 나오는 수는 뭘까?" 영일이는 물론 수학을 아주 잘하지만 이런 문제는 본 적이 거의 없었다... 그래서 프로그램을 만들어 더 큰 수도 자동으로 계산하고 싶어졌다. 시작 값(a), 곱할 값(m), 더할 값(d), 몇 번째인지를 나타내는 정수(n)가 입력될 때, n번째 수를 출력하는 프로그램을 만들어보자. 입력 시작 값(a), 곱할 값(m), 더할 값(d), 몇 번째 인지를 나타내는 정수(n)가 공백을 두고..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 6장 [내부링크]

Chapter 06 AWS 서버 환경을 만들어보자 -AWS EC2 AWS 회원가입 AWS 공식사이트(aws.amazon.com/ko/)로 이동 후 무료 계정 만들기 지원 플랜에서 기본 플랜 선택 EC2 인스턴스 생성하기 ECS란? AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버 - 서비스가 구동될 지역(리전)을 아래와 같이 서울로 변경 - 검색창에 EC2를 입력 -> 인스턴스 시작 -> 아마존 리눅스 1 AMI 사용 -> 인스턴스 유형 : t2.micro -> 스토리지 크기 30GB로 변경 -> Name 태그 추가 -> 보안 그룹 추가 - 다른 곳에서 다시 접속할 때는 해당 장소의 IP를 SSH에 규칙에 추가 - 인스턴스로 접근하기 위한 pem키(비밀키) 생성 고정 IP 할당하기 -..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 5장(1) [내부링크]

Chapter 05 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 구글 서비스 등록 - 여기서 발급된 인증정보를 통해서 로그인 기능과 소셜 서비스 기능을 사용할 수 있음 - 구글 클라우드 플랫폼 주소(https://console.cloud.google.com) 이동 - 프로젝트 선택 -> 새 프로젝트 : freelec-springboot2-webservice 생성 - 왼쪽 메뉴 탭을 클릭해 API 및 서비스 -> 사용자 인증 정보 -> OAuth 클라이언트 ID 클릭 -> 동의 화면 구성 - 애플리케이션 이름을 아까와 같이 작성 - 다시 OAuth 클라이언트 ID 만들기 화면으로 이동 어플리케이션 유형 : 웹 어플리케이션 승인된 리디렉션 URI : http://localhost:8080/l..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 4장 [내부링크]

Chapter 04 머스테치로 화면 구성하기 머스테치란? - 수많은 언어를 지원하는 가장 심플한 템플릿 엔진 템플릿 엔진이란? - 지정된 템플릿 양식과 데이터가 합쳐서 HTML문서를 출력하는 소프트웨어 머스테치 플러그인 설치 - JSP나 Thymeleaf등은 유료버전에서만 지원 가능 - Plugins으로 mustache 검색 후 설치 기본 페이지 만들기 -build.gradle에 의존성 등록 compile('org.springframework.boot:spring-boot-starter-mustache') -src/main/resources에 templates 파일을 만들고 index.mustache 생성 -web 패키지 안에 IndexController 생성 테스트 코드로 검증 - test 패키지에 I..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 3장 [내부링크]

Chapter 03 스프링 부트에서 JPA로 데이터베이스 다뤄보자 JPA의 역할? - 서로 지향하는 바가 다른 2개 영역(객체지향 프로그래밍 언어와 관계형 데이터베이스)을 중간에서 패러다임 일치를 시켜주기 위한 기술 - 개발자는 객체지향적으로 프로그래밍을 하고, JPA가 이를 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행 Spring Data JPA 적용하기 -build.gradle에 아래와 같은 의존성 추가 compile('org.springframework.boot:spring-boot-starter-data-jpa') compile('com.h2database:h2') -src/main/java 아래의 com.qwon.springboot 패키지 -> domain 패키지 ->posts 패키지..

[Java] 코드업 (CodeUp) 자바 풀이 1081~1090 [내부링크]

#1081 문제 설명 1부터 n까지, 1부터 m까지 숫자가 적힌 서로 다른 주사위 2개를 던졌을 때 나올 수 있는 모든 경우를 출력해보자. 참고 중첩의 원리... 반복 실행 구조도 조건 실행 구조와 마찬가지로 중첩의 원리가 적용된다. 반복 실행 구조를 중첩하면 원하는 반복 구조를 다양하게 만들어 낼 수 있다. 예시 int i, j; int n=3, m=6; for(i=1; i

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2장 [내부링크]

Chapter02 스프링부트에서 테스트 코드를 작성하자 테스트 코드의 장점 - 매번 코드를 수정할 때마다 톰캣을 내렸다가 다시 실행하는 일을 반복을 없애줌 - System.out.println()과 같은 눈으로 검증해야 하는 번거로움없이 자동검증 - 개발자가 만든 기능을 안전하게 보호 (ex. 새로운 B라는 기능이 추가됬을 때 이 기능만을 검증하여 기존에 잘되던 A라는 기능에 추가 가능) * 테스트 코드 작성하기 Java 디렉토리에서 New -> Package com.qwon.springboot 패키지 & Application 클래스에 아래와 같이 작성 그 아래 web패키지를 만들고 HelloController 클래스 생성 이제 테스트 코드를 검증하기 위해 src/test/java 디렉토리에 앞에서 생성..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 1장 [내부링크]

Chapter 01 인텔리제이로 스프링부트 시작하기 https://www.jetbrains.com/toolbox/app/ JetBrains Toolbox App: Manage Your Tools with Ease Open any of your projects in any of the IDEs with one click. www.jetbrains.com 이를 통해, IntelliJ IDEA Community 버전을 설치한다. 그레이들 프로젝트를 생성 후, 아래와 같이 설정하기로 한다. 이후, build.gradle에 아래와 같이 코드를 작성한다. 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 29 30 31 32 33 ..

웹 개발 기본 지식 용어 [내부링크]

- 리팩토링(Refactoring) 리팩토링은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다. - 디버깅(Debugging) 디버깅 또는 디버그는 컴퓨터 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나 비정상적 연산을 찾아내고 그 원인을 밝히고 수정하는 작업 과정을 뜻한다. 일반적으로 디버깅을 하는 방법으로 테스트 상의 체크, 기계를 사용하는 테스트, 실제 데이터를 사용해 테스트하는 법이 있다. - 인덱싱(Indexing) 테이블에 인덱스를 삽입하는 것을 인덱싱(index..

[Java] 코드업 (CodeUp) 자바 풀이 1071~1080 [내부링크]

#1071 문제 설명 정수가 순서대로 입력된다. -2147483648 ~ +2147483647, 단 개수는 알 수 없다. 0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자. while( ), for( ), do~while( ) 등의 반복문을 사용할 수 없다. 참고 goto 명령문을 사용하면 간단한 반복 실행을 만들 수 있다. 반복 실행 부분을 빠져나오기 위해(즉 무한 반복을 방지하기 위해) 반복 실행 되는 도중에 조건을 검사해야 한다. goto 이름: 이 명령은 이름: 이 작성된 곳으로 프로그램의 실행 흐름을 바꾸어 준다. "이름:" 과 같이 콜론(:)이 붙어있는 부분을 이름표(label, 레이블)라고 한다. 레이블은 특별한 선언 없이 사용할 수 있으며 언더바(_)나 영문자로 시작하면..

[Java] 코드업 (CodeUp) 자바 풀이 1061~1070 [내부링크]

#1061 문제 설명 입력된 정수 두 개를 비트단위로 or 연산한 후 그 결과를 정수로 출력해보자. 비트단위(bitwise) 연산자 |(or, vertical bar, 버티컬바)를 사용하면 된다. ** | 은 파이프(pipe)연산자라고도 불리는 경우가 있다. ** 비트단위(bitwise) 연산자는, ~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor), (bitwise right shift) 가 있다. 예를 들어 3과 5가 입력되었을 때를 살펴보면 3 : 00000000 00000000 00000000 00000011 5 : 00000000 00000000 00000000 00000101 3 | 5 : 00000000 00000000 0000000..

스프링[Spring] 게시판 만들기_06 [내부링크]

페이지 기능 추가 게시판 목록의 개수를 늘릴때 필요한 페이지 기능을 추가해보기로 한다. 먼저, 페이지에 대한 클래스를 작성한다. 1. Page.java 클래스 추가 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 29 30 31 32 33 34 35 36 37 38 39 40 package com.myboard.vo; public class Page { private int pageNum; private int amount; public Page() { this(1, 10); } public Page(int pageNum, int amount) { this.pageNum=pageNum; this.amount=amount..

[Java] 코드업 (CodeUp) 자바 풀이 1051~1060 [내부링크]

#1051 문제 설명 두 정수(a, b)를 입력받아 b가 a보다 크거나 같으면 1을, 그렇지 않으면 0을 출력하는 프로그램을 작성해보자. 참고 어떤 값을 비교하기 위해 비교/관계연산자(comparison/relational)를 사용할 수 있다. 비교/관계연산자는 주어진 2개의 값을 비교하여 그 결과가 참인 경우 참(true)을 나타내는 정수값 1로 계산하고, 거짓인 경우 거짓(false)를 나타내는 정수값 0으로 계산한다. 비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고, 그 결과를 1(참), 또는 0(거짓)으로 계산해 주는 연산자이다. 비교/관계연산자는 >, =, =,

2020년을 돌아보며... [내부링크]

어느덧 휴학을 한지 약 8개월이라는 시간이 흘렀다. 초반에 적었던 휴학하려는 이유를 되돌아보기로 했다. 첫번째, 코딩실력을 키우기 위해서 반론 - 학교다니면서 실력을 키울수 있을텐데 시간낭비가 아닐까? -> 충분히 맞는 말이다. 그렇지만 어영부영 학교 수업따라가며 내가 무엇을 배우는지 방향성도 잡지 못하면서 배우는 주입식의 공부보다는 내가 필요로 하는 공부를 중점으로 하고 앞으로 어떤식으로 준비를 하며 나아가야 할지에 대한 설계가 필요하다고 느꼈다. 두번째, 각종 대외활동과 자격증을 취득하기 위해서 반론 - 첫번째와 동일 -> 일반적으로 하는 주 1-2회 뿐만 아니라 정말 내 자신을 발전 시킬수 있도록 하는 좋은 대외활동을 찾아보고, 자격증도 설렁설렁이 아닌 확실하게 잡을 예정이다. 세번째, 아르바이트 ..

[Java] 코드업 (CodeUp) 자바 풀이 1041~1050 [내부링크]

#1041 문제 설명 영문자 1개를 입력받아 그 다음 문자를 출력해보자. 영문자 'A'의 다음 문자는 'B'이고, 영문자 '0'의 다음 문자는 '1'이다. 참고 숫자는 수를 표현하는 문자로서 '0' 은 문자 그 자체를 의미하고, 0은 값을 의미한다. 힌트 아스키문자표에서 'A'는 10진수 65로 저장되고 'B'는 10진수 66으로 저장된다. 따라서 문자도 값으로 덧셈을 할 수 있다. 입력 영문자 1개가 입력된다. 출력 다음 문자를 출력한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(Syst..

way back into love - 그 여자 작사 그 남자 작곡 OST [내부링크]

Way Back Into Love 사랑안으로 돌아가는 길 I've been living with a shadow overhead 난 내 머리위로 그림자가 드리워진 채로 살았어 I've been sleeping with a cloud above my bed 난 내 침대 위로 구름이 드리워진 채로 잠을 잤어 I've been lonely for so long 난 너무나 오랫동안 외로웠어 Trapped in the past, I just can't seem to move on 과거에 갇힌채, 난 도저히 나아갈 수가 없었지 I've been hiding all my hopes and dreams away 난 내 꿈과 희망을 숨겨두고만 있었지 Just in case I ever need em again somed..

네이버 오픈클래스 Q&A [내부링크]

Question 1 개발자의 지원서, 어떻게 작성하는 것이 좋을까요? 총 13,264개 질문 중 유사 질문 839개 화려한 문체나 거창한 커리어보다는, 개발에 대한 나만의 열정과 노력들을 보여주시는 것이 중요합니다.입사 후 빠르게 배우며 성장해 갈 기회가 무궁무진하기 때문에 개발을 정말 좋아하는지 보곤 합니다. 그런 면에서 이수한 컴퓨터 공학 관련 과목, 기술적 문제를 해결한 경험, 에너지를 집중해 끝까지 파고들었던 경험,개발자로서 개선해보고 싶은 네이버의 서비스 등도 미리 생각해 두시면 도움이 될 것입니다. 포기하지 않고 끝까지 몰입해 본 경험, 세상의 불편을 개발로 풀고자 시도했던 경험 등개발자로서의 성장 의지를 보여줄 수 있는 본인만의 스토리가 있다면 잘 녹여서 작성해주세요.글로 표현하기 어렵다면 ..

스프링[Spring] 게시판 만들기_05 [내부링크]

기능 추가하기 검색을 위한 select 이외의 기능을 게시판에 추가해보기로 하자. 화면 이동을 위한 컨트롤러를 아래와 같이 미리 정리해두기로 한다. * 컨트롤러 분석 (프로젝트시 미리 정리해두면 좋음) /* 기능 URL Method Form 글 목록 /board/list Get X 글 등록 /board/register Post O 글 등록 폼 이동 /board/register Get X 글 읽기 /board/get Get X 글 수정삭제로 이동 /board/modify Get X 글 수정처리 /board/modify Post O 글 삭제 /board/remove Post X */ 다음과 같이 미리 정리해둔 후에, Controller에 작성하기로 한다. (1) 먼저 src/main/java->MyBoard..

[Java] 코드업 (CodeUp) 자바 풀이 1031~1040 [내부링크]

* 자바의 n 진수 변환 -> Integer 클래스의 메소드를 사용하여 변환한다. 2진수 변환 : Integer.toBinaryString(int num) -> String 형태 8진수 변환 : Integer.toOctalString(int num) ->String 형태 16진수 변환 : Integer.toHexString(int num) -> String 형태 참고로 System.out.printf("%출력타입",num);과 같은 형태로도 사용이 가능하다. 출력 타입 %d:10진수, %o:8진수, %x:16진수(소문자), %X:16진수(대문자) #1031 문제 설명 10진수를 입력받아 8진수(octal)로 출력해보자. 참고 %d(10진수 형태)로 입력받고, %o를 사용해 출력하면 8진수(octal)로 ..

[Java] 코드업 (CodeUp) 자바 풀이 1001~1010 [내부링크]

#1001 문제 설명 C/C++언어에서 가장 기본적인 명령이 출력문이다. printf()를 이용해 다음 단어를 출력하시오. Hello 참고 C/C++ IDE 프로그램을 설치한 후, 아래와 같은 소스 코드를 작성하고 "컴파일-실행"을 수행시키면, 지정한 "문장"이 출력된다. #include int main() { printf("문장"); return 0; } ** 주의 : 본 화면에서 복사하여 붙여넣기하면 제대로 되지 않을 수 있으니 직접 소스코드를 작성해 넣어야 한다. 입력 입력 없음 출력 Hello 1 2 3 4 5 6 7 8 9 public class Main { public static void main(String[] args) { System.out.println("Hello"); } } #10..

스프링[Spring] 게시판 만들기_04 [내부링크]

이제는 본격적으로, 화면에 대한 템플릿을 적용시켜 보기로 한다. 템플릿 처리 templated.co TEMPLATED A collection of 867 Creative Commons-licensed CSS, HTML5 and Responsive site templates created by Cherry, Doni, AJ, and co. templated.co 또는 https://www.free-css.com/free-css-templates Download 3069 Free Website Templates - CSS & HTML | Free CSS www.free-css.com 등 구글에서 template를 검색 후 무료 템플릿을 다운받는다. 나 같은 경우는 https://colorlib.com/wp/..

스프링[Spring] 게시판 만들기_03 [내부링크]

일반적인 웹 프로젝트의 구성 - 영속 계층, 데이터 계층 (Persistence Tier) : 데이터를 어떤 방식으로 보관하고 사용할지 설계하는 영역 -> (우리는) MyBatis Mapper를 이용하기로 함 - 비즈니스 계층 (Business Tier) : 순수한 비즈니스 로직을 담고 있는 곳 (고객이 원하는 요구사항을 반영하는 곳) -> xxxService라는 이름의 자바 코드로 구현 - 화면 계층 (Presentation Tier) : 화면에 보여주는 기술을 사용하는 영역 -> Servlet/JSP 1. 영속 계층 MyBatis Mapper를 이용해 각 테이블의 CRUD를 구현하는 것을 Spring 웹 프로젝트의 영속 계층(Persistence Tier)이라고 한다. CREATE : 새로운 데이터 ..

스프링[Spring] 게시판 만들기_02 [내부링크]

JDBC까지 추가하였으므로, 이제는 객체와 인터페이스를 구현하기로 한다. 1. 객체 생성 프로젝트의 src/main/java 속성아래에 com.myboard.vo로 패키지를 생성후, MyBoardVo 클래스를 생성한다. 이후, 만들고자 하는 테이블의 객체들을 설정해준다. 이때, 각각의 객체들은 private로 설정한다. 접근 제어자(Private)를 사용하는 이유 이렇게 접근 제어자를 사용하는 이유는 보안 때문이라고 할 수 있다. 만약에 웹사이트에서 아이디와 비밀번호 같은 중요한 정보를 public 변수에 저장을 한다면 아무데서나 직접적으로 접근하여 그 값을 변경할 수 있기 때문에 노출되기 쉬워지게 된다. 이런 중요한 변수들은 대부분 private를 붙여준다. 나는 롤(LoL)에 대한 정보를 저장하는 테..

스프링[Spring] 게시판 만들기_01 [내부링크]

1. 프로젝트 생성 eclipse 창에서 new->spring Legacy Project 클릭 후, Project Name : MyBoard, Templates : Spring MVC Project, Package Name : com.myboard.controller로 설정한다. 생성하였다면, 잘 실행되는지 Run as를 통해 실행시켜본다. 이때, 아래와 같이 한글이 깨지는 경우가 발생하기도 한다. 이럴 때는, 기본경로인 src->main->webapp->WEB-INF->views->home.jsp에서 다음과 같은 page 디렉티브 속성을 추가해주면 된다. 다시 실행해보면 위와 같이 나타나게 된다. 2. pom.xml 설정 바꾸기 (개인마다 차이가 있음) (1) 자바 버전 업그레이드 먼저, 버전을 업그레..

스프링[Spring] 설치하기 [내부링크]

1. JDK 설치 나는 jdk는 1.8_251 버전을 설치하기로 한다. 구글에 jdk 1.8 251 download -> 해당하는 버전 다운 드라이버 설치할 때, 설치위치를 잘 기억해놔야 한다. ex : (C:\Program Files\Java\jre.1.8.0_251) 자바 프로그래밍 환경 구축방법 내컴퓨터 -> 시스템 -> 고급시스템 속성 -> 환경 변수 -> 시스템 변수란에 변수 이름 : JAVA_HOME 변수 값 : C:\Program Files\Java\jre.1.8.0_251와 같이 설정 참고사이트 : (https://macchiato.tistory.com/9) * 참고 : jdk vs jre vs jvm JDK : Java Development Kit 말 그대로 자바 개발을 위한 도구(Kit..

[Java] 코드업 (CodeUp) 자바 풀이 1021~1030 [내부링크]

#1021 문제 설명 1개의 단어를 입력받아 그대로 출력해보자. 입력 한 단어가 입력된다.(단, 단어의 길이는 50자 이하이다.) 문자를 50개 저장하기 위해서는 char data[51] 로 선언하면 된다. char data[51]=""; scanf("%s", data); 를 실행하면, data[51] 에 한 단어가 저장된다. 출력 입력된 단어를 그대로 출력한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); String s=sc.next(); System.out.print..

[Java] 코드업 (CodeUp) 자바 풀이 1011~1020 [내부링크]

#1011 문제 설명 문자형(char)으로 변수를 하나 선언하고, 변수에 문자를 저장한 후 변수에 저장되어 있는 문자를 그대로 출력해보자. 참고 char x; scanf("%c", &x); printf("%c", x); 와 같은 방법으로 가능하다. 입력 문자 1개가 입력된다. (단, 입력되는 문자는 알파벳 대, 소문자 및 숫자를 비롯한 아스키코드로 표현할 수 있는 문자들만 입력된다.) 출력 입력된 문자를 그대로 출력한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import java.util.Scanner; public class Main{ public static void main(String args[]) { //Scanner는 문자를 입력 받는..