이해하는데 오래 걸렸던 셀프넘버https://www.acmicpc.net/problem/467310000보다 작거나 같은 셀프 넘버 출력하기 위해 10000+1 배열 생성d(n)으로부터 n을 구하는 것보다 n으로부터 d(n)을 구하는 것이 쉬움ex) n = 1
https://www.acmicpc.net/problem/10250수학구현사칙연산호텔 방 번호 규칙찾기조건 1. 손님이 온 순서대로 방을 배정하는데 거리가 가까운 방 먼저 배정한다.조건 2. (1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W) 에 따라 W는
https://www.acmicpc.net/problem/15828라우터에 입력된 순서대로 버퍼에 추가되고 삭제된다는 것을 통해 큐 자료구조를 이용해야겠다고 생각했다. 만약 버퍼에 공간이 없을 경우 입력은 무시되는데 이는 큐가 꽉 찰 경우 추가하지 않겠다는 의
https://www.acmicpc.net/problem/17413단어뒤집기1 문제의 응용버전으로 태그에 대한 처리가 포인트이다. 1\. 태그 안에 있는 단어인지 아닌지 구분하기 위해 tag 변수 선언2\. if '<' then tag = true, 스택
https://www.acmicpc.net/problem/10799레이저인지 쇠막대기인지 구분하는 것이 포인트이다. 괄호가 인접해있을 경우 () 레이저, 그렇지 않을 경우 쇠막대기이다. 레이저일 경우 스택 사이즈만큼 더해주고 쇠막대기일 경우 1을 더해준다. 스
https://www.acmicpc.net/problem/2941입력으로 받은 문자열에 크로아티아 알파벳이 포함되어 있으면 개수 출력문자열의 contains()와 replaceAll() 메소드를 사용하여 해결하였다. contains()의 리턴값은 boolean
https://www.acmicpc.net/problem/1316문제해결
재귀함수의 대표적인 예로 피보나치 수열이 있다. 시간복잡도에 대해 크게 고민해보지 않았는데 공부하다가 문득 궁금해져서 피보나치 수열의 시간복잡도를 재귀, 동적 프로그래밍, 반복문으로 비교해보고자 한다.피보나치 수열은 첫째, 둘째항은 1이고 그 다음 항부터는 이전 항 2
https://www.acmicpc.net/problem/17225
https://www.acmicpc.net/problem/2798해당 문제는 브루트 포스 알고리즘 문제 중 하나로 하나씩 탐색하면서 조건을 만족하는 결과를 출력하면 된다.3중 for문을 이용하면 시간복잡도가 O(N^3)으로 매우 크지만 N이 100이하이기 때문
https://www.acmicpc.net/problem/2178bfs 가장 기본적인 문제로 처음 풀 때는 이해하기 힘들었는데 하다보니까 이해되기 시작했다!처음 위치에서 마지막 위치로 이동할 때 지나야 하는 최소 칸 수를 구하기 위해 bfs로 구현하였다.인접한
https://www.acmicpc.net/problem/7576이 문제는 시작점이 여러 개인 bfs 유형이다. 처음에 이 문제를 마주했을 때 어떻게 익은 토마토를 큐에 한 번에 넣을 수 있을지 고민했었다.기본 bfs 구현에서 익은 토마토를 큐에 넣어주는 부분
https://www.acmicpc.net/problem/2667처음에 많이 헤맸던 문제였는데 다시 풀었을 때도 헤매네 ㅎ 출력 : 총 단지 수 , 단지내 집의 수 오름차순 정렬정렬하기 위해 ArrayList를 활용하였고 탐색하면서 방문할 때마다 집의 수를 카
https://www.acmicpc.net/problem/4963dfs 기본 틀에서 크게 벗어나지 않는 문제였다. 다만 상하좌우, 대각선으로 이동가능하다는 것만 주의하면 된다. 종료조건으로 w와 h 모두 0이면 break를 걸어주었고 하나씩 탐색하면서 섬의 개
https://www.acmicpc.net/problem/7562나이트가 이동할 수 있는 범위를 내에서 하나씩 탐색하면서 출발 좌표에서 도착 좌표까지 이동하는데 거치는 최소 칸 수를 구하는 문제이다. 다음 좌표에 이전 좌표값 +1을 해서 구해주면 된다.
https://www.acmicpc.net/problem/2206기본 bfs에서 벽을 부수고 이동할 수 있다는 조건이 추가된 문제이다. 벽을 부순 적이 있는지 없는지 구분하는 것이 포인트인데 이 부분을 생각하지 못했다. 고민하다가 3차원 배열로 해결할 수 있다
https://www.acmicpc.net/problem/1629제곱의 성질과 모듈러의 성질을 알고 있다면 쉽게 풀 수 있는 문제이다. 문제에서 A, B, C 모두 2,147,483,647 이하의 자연수라고 했기 때문에 지수를 반으로 나누어 처리하면 시간복잡도
https://www.acmicpc.net/problem/117291번, 2번, 3번 총 3개의 기둥이 있고 n개의 원판이 있을 경우 원판의 이동 순서는 다음과 같다.만약, 원판의 개수가 n개일 경우n-1개의 원판을 1번 기둥에서 2번 기둥으로 옮긴다.n번째
https://www.acmicpc.net/problem/2750정렬 알고리즘에는 버블정렬, 삽입정렬, 퀵정렬 등 다양한 알고리즘이 있어서 직접 구현을 하며 시간복잡도에 대해 공부하였다. 첫 번째 코드는 버블정렬 알고리즘을 구현한 코드이다. 버블정렬은 현재 요
버블 정렬은 가장 기본적인 알고리즘 중 하나로 인접한 모든 값을 비교해서 작은 값이 앞으로 이동하도록 교환하는 알고리즘이다. 모든 값을 비교하기 때문에 데이터가 많을수록 처리시간이 오래걸리는 단점이 있다.
https://www.acmicpc.net/problem/9095대표적인 다이나믹 프로그래밍 문제 중에 하나인 1, 2, 3 더하기 문제이다. 먼저 문제로부터 점화식을 찾았다. (난이도가 낮을수록 문제를 통해 쉽게 점화식을 찾을 수 있다고 한다.)Dn = 정수
https://www.acmicpc.net/problem/15988기존 1, 2, 3 더하기 문제를 풀어봤다면 크게 어렵진 않았을 것이다. 이 문제의 핵심은 n이 1,000,000보다 작거나 같아서 오버플로우가 나지 않도록 주의하는 것이다.int 범위를 벗어나
https://www.acmicpc.net/problem/1932구하고자 하는 것은 합이 최대가 되는 경로에 있는 수의 합이다. 문제를 처음 봤을 때 점화식을 어떻게 세워야 할 지 감이 오지 않아서 다른 사람 풀이를 참고했다. 먼저 입력으로 받은 값을 i번째
https://www.acmicpc.net/problem/11055가장 긴 증가하는 부분 수열 (LIS) 문제의 응용 버전이다. https://www.acmicpc.net/problem/11053먼저, 점화식은 D\[i] = i번째에서 끝나는 부분 수
https://www.acmicpc.net/problem/1193문제를 보고 짝수번째 행과 홀수번째 행에 대한 규칙은 금방 찾았으나 어떻게 입력으로 주어진 x번째에 위치한 값을 찾을지에 대한 방법은 찾기 어려웠다. 힌트 참고해서 노트에 한참을 끄적이다가 두 시
https://www.acmicpc.net/problem/18352그래프는 인접 행렬과 인접 리스트 두 가지로 표현할 수 있다. 이전에 BFS 문제를 인접 행렬로만 풀어서 이번에도 인접 행렬을 이용해서 거리를 구하려고 했으나 0과 1로만 이루어진 2차원 배열이
구현이 잘 안풀려서 코드업 기초 100제를 다시 풀어보기로 했다.자주 쓰지 않아서 헷갈렸던 개념에 대해서 리뷰하고자 한다.해당 문제는 if문으로 구현할 수 있지만 if문의 조건식 결과는 참, 거짓 두 가지밖에 없기 때문에 경우의 수가 많아질 경우 코드가 길어지고 처리시
이코테 그리디 알고리즘 문제 중 하나인 큰 수의 법칙 문제이다.자연수가 주어졌을 때, M번 더하여 가장 큰 수를 만드는 문제인데 연속해서 K번까지만 더할 수 있다는 조건이 있다. 가장 큰 수를 만들기 위해서는 첫 번째로 큰 수를 M번 더하면 되는데 연속해서 K번까지만
여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 문제인데, 각 행에서 가장 숫자가 낮은 카드를 뽑아서 최종적으로 가장 높은 숫자의 카드를 뽑아야 한다.2차원 배열로 카드의 숫자가 주어지고 n과 m이 100이하여서 2중 루프로 최솟값을 찾아서 리스
https://www.acmicpc.net/problem/10162문제 풀기 전 데이터 유형과 길이를 확인하고 조건을 다시 한 번 확인한다. 해당 문제의 데이터 유형은 정수로 10,000보다 작은 자연수이다. 구하고자 하는 것은 요리시간 T를 맞추기 위한 최소