본문 바로가기

알고리즘/문제 풀이

[코드 트리] 배열 회전 2 Java 1. 문제 설명문제 링크2. 풀이 설명idx, idy를 활용해서 배열을 이동시킬 수 있는가에 대한 문제이다.하지만 한 가지 생각해야할 부분은 배열을 이동시킬 때, 중앙에서 가로 갈수록 건너 뛰어야하는 행렬의 GAP이 1씩 커진다는 점이다.이 점만 주의하면 된다.배열 이동 시키는 법은 다음과 같다.초기값을 temp라는 변수에 넣고, 배열을 한 칸씩 이동하여 돌리고, 맨 마지막 행렬 위치에 아까 temp에 넣었던 값을 삽입하면 된다.2번의 이동마다 90도씩 꺾으면 되므로, 반복문을 이용해 idx,idy의 값을 변경해줬다. idx, idy가 무엇인지 모르겠다면, 배열의 방향 전환에 대해서 검색해보고 공부하길 바란다. 더보기
💚 백준 1940 주몽 1. 문제 분석문제 링크N개의 수 중 2개를 뽑아서 그게 M과 맞는지 계산하면 된다고 생각했다.그래서 조합을 사용했다. N이 15000개까지 주어진다. 15000C2 = 112492500 이다.주어진 시간이 2초임으로 20억 번의 계산이 가능한 상황에서 11억의 계산은 Safe다. 따라서 단순 조합을 해도 문제는 풀린다. (시간이 오래 걸렸지만...)나는 DO IT! 알고리즘 코딩테스트 책에서 소개한 투 포인터로도 문제를 풀어 보았다. 투 포인터를 쓰면 정렬 후 최대 N+1 번의 연산이 필요해서 총 N+1 +NlogN = O(NlogN) 의 시간이 든다.이걸 N의 최대 값인 15000으로 계산해보면, 15000 * log(15000) = 62641 개의 연산만 하면 되어서 훨씬 빠르다.두 방법 다 소개해.. 더보기
💜 백준 2108 통계학 JAVA 1. 문제 설명[문제 링크](https://www.acmicpc.net/problem/2108)산술 평균, 중앙값, 최빈값, 범위를 구하면 된다. 2. 푸는 원리 산술 평균 -> 총합 / 머릿수 중앙값: 중앙에 있는 녀석 계산 최빈값: TreeMap을 사용 Key = 입력 받은 값, value = 해당 값이 나온 횟수, TreeMap은 순서가 보장됨으로, 입력을 한번 정렬한 후에 TreeMap에 넣으면 된다. 범위 : 최대값 - 최소값 3. 코드 분석import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.TreeMap;/* * .. 더보기
💜 백준 10250 ACM 호텔 1. 문제 설명 [ACM호텔 문제링크](https://www.acmicpc.net/problem/10250) 2. 푸는 원리 그냥 반복문 돌리면 된다. 자신감을 되찾기 위해서 풀었다. 3. 코드 분석 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; /* * 10250 ACM 호텔 * */ public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamRe.. 더보기
💜 백준 11729번 하노이 탑 이동순서 1. 문제 설명 11729번 하노이 탑 이동 순서 링크 이동 순서를 Log로 찍어야 한다. 2. 푸는 원리 재귀를 이용한다. (0) 재귀함수에는 출발지, 경유지, 도착지, 도착지까지 옮겨야 하는 원판의 번호가 있다. (원판의 번호가 큰 것이 크기가 큰 것이다. 따라서 제일 작은 원판은 번호가 1이다.) (1) 실제로 원판을 옮기는 것이 아니라, 그 이동 순서에 대한 로그만 찍는다. [기저조건] (1)옮겨야하는 원판의 번호가 0이 되면 그냥 return 한다. [계산] (1) 현재 옮겨야할 원판보다 작은 모든 원판을 경유지로 옮기는 Log를 찍는다. (재귀 이용) (2) start와 end를 StringBuilder에 담아서 현재 원판의 이동을 Log로 찍는다. (StringBuilder에 담는 행위 자체.. 더보기
💜 백준 1874번 스택 수열 1. 문제 설명 1874 스택수열 문제 설명 1~N까지 오름차순으로 스택에 하나씩 집어넣는다. 스택에 하나씩 들어올 때, 적절히 POP하여, 문제에서 원하는 수열을 만들 수 있는지 구하라 만들 수 있다면 PUSH = + , POP = - 로 그간 해왔던 명령어를 출력하고, 만들 수 없다면 NO를 출력하라 2. 문제 푸는 방법 A. 첫 번째 방법 (STACK 자료 구조 이용) (1) 답이 되는 수열(이하 ans)과 스택에 입력하는 순서인 오름차순 수열(이하 arr)을 배열에 저장했다. (2) 둘 다 지시자를 가지고 있다. ans의 지시자를 ansIndicator, arr의 지시자를 arrIndicator라고 할 때, ​ a. arrIndicator가 가르키고 있는 것이 ansIndicator보다 작거나 같.. 더보기
💜 백준 7490. 0 만들기 JAVA 1. 문제 설명 0 만들기 문제 링크 3~9까지 수가 주어지는데, 그 사이 사이에 + 혹은 - 혹은 두 수 붙이기를 사용하여, 총 합을 0으로 만들어라. 2. 푸는 원리 이런 문제는 일일히 char로 분할하여 가지고 있는 것보다, String으로 한번에 가지고 있다가 StringTokenizer로 푸는 것이 좋다는 것을 알았다. (1) DFS를 돌린다. (-> String에 다음 depth의 값을 추가하는 식) (2) 한번은 두 수 사이에 +를 넣고, 한번은 두 수 사이에 -를 넣고 한번은 두 수 사이에 공백을 넣고 경우를 진행한다. (3) 마지막 수까지 String 문자열에 쌓이면, cal이란 이름의 함수에 넣어서 계산한다. (4) cal의 역할은 다음과 같다. ​ a. 공백인 부분을 합쳐서 하나의 수.. 더보기
💜 백준 3109 뱀 JAVA 1. 문제 분석 [3190 뱀 문제 링크](https://www.acmicpc.net/problem/3190) 지렁이 게임의 원리대로 움직이는 문제 빈 공간은 0, 사과는 1, 뱀이 존재하는 자리는 2로 표시한다. 뱀이 2차원 배열 내를 움직임 -> 움직이니까, 지나간 장소는 2가 아니라 다시 0으로 와야함. 사과를 먹으면 뱀의 몸집이 1 커짐 뱀이 벽에 부딪히면 게임오버 뱀이 자신의 몸에 부딪히면 게임오버 뱀은 방향 전환이 가능 -> 몇 초에 반시계, 시계 방향 중 어디로 움직일지는 주어진다. 게임이 몇 초간 걸리는지 구하기 (뱀은 한 번 움직일 떄, 2차원 배열에서 한 칸 움직이고, 이떄 시간이 1 든다.) 2. 푸는 원리 저기 나오는 1~5를 함수로 작성해서, 함수가 돌아가도록 하면 된다. 처음에는.. 더보기