목록구현 (59)
Dev.baelanche
달팽이배열로 푼 사람들이 많다는데 그게 뭔진 모르겠고 난 그냥 인덱스 계산해서 풀었다. 배열과 좌석 배치 좌표의 세로방향이 반대이기 때문에 유의하자. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; st = new StringTokenizer(br.readLine()); int c = Integer.parseInt(st.nextToken()); int r = Integer.parseInt(st.nextToken()); int k = Integer.p..
정~~~~말 간만에 스위치로 구현한 문제라서 업로드했다. 기본 문자열 다루는 문제라서 따로 설명할건 없고 소스코드를 보면 될 것 같다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); char c[][] = new char[n][n]; for(int i=0; i
구현자체는 정말 쉬운 문제다. for(int i=0; i0) { st = new StringTokenizer(br.readLine()); a = Integer.parseInt(st.nextToken()); b = Integer.parseInt(st.nextToken()); ch = br.readLine().toCharArray(); len = ch.length; for(int i=0; i
점 a, b, c 를 완적탐색으로 하면 O(n^3)으로 시간초과가 나게 된다. 점 a, b 를 고르고 이분탐색으로 c를 찾으면 O(n^2 log n)으로 AC를 맞을 수 있지만 O(n^2)의 방법으로 풀어보겠다. 점 a, b 를 정하고 b-a와 같은 값 c를 b < k < n 에서 찾는다. k == n-1 일때까지 모두 탐색했다면 b를 오른쪽 점으로 한칸 옮겨서 반복 수행한다. a점도 마찬가지로 b점이 b == n-2 이면 오른쪽으로 움직인다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.i..
예제를 예로 설명해보겠다. 입력값 배열 3 4 7 5 6 4 2 9 입력값따로, 부분합배열을 따로 만들어준다. 부분합 배열 3 7 14 19 25 29 31 40 43 47 for(int i=1; i0) { int n = sc.nextInt(); int m = sc.nextInt(); int k = sc.nextInt(); int a[] = new int[n]; for(int i=0; i
문자열체크 문제이다. +, -, *, / 가 나오기 전까지의 문자들을 왼쪽 숫자, 그 이후부터 = 이전까지의 문자들을 오른쪽 숫자 = 이후의 문자들을 결과값으로 저장한다. 왼쪽 숫자가 음수일 수 있으므로 그 부분을 유의해야한다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); sc.nextLine(); while(t-->0) { char c[] = sc.nextLine().replaceAll(" ", "").toCharArray(); String left = ""; char mid; String right = ""; String result..
A A A C B B B C가 맨처음 들어간 문자열이고 현재 문자열이 B라면, C와 B를 비교한다. B가 C보다 순서가 같거나 빠르므로 더 앞자리와 비교한다. A와 B를 비교한다. B가 A보다 순서가 느리므로 문자열 맨뒤에 붙이게된다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); while(t-->0) { int n = sc.nextInt(); int idx = 0; String result = sc.next(); for(int i=0; i= 0) { if(result.charAt(k) >= c) { k--; } else { s = fa..
포인터를 두개 놓고 국회의원의 명예 점수가 비어있을때의 경우를 체크해주어야 한다. 예시를 보자. 1 2 3 4 5 6 7 0 1 1 1 0 1 1 국회의원은 5명이고 모독한번으로 모두 박탈시키려면 점수가 1, 2, 3, 4, 5 가 되어야 한다. 먼저, 포인터를 left, right로 두고 left의 초기값은 무조건 1이다. right의 초기값은 국회의원의 명예점수중 최소값이다. 따라서 left=1, right=2가 된다. left 포인터가 가르치는 곳에 명예점수가 비어있다면 right포인터의 명예점수가 채워져 있을때 그 값을 당겨온다. a[left] = 0, a[right] = 1 이므로 2에서 1을 빼서 1로 당겨오고 그만큼 해커를 고용한다. 1 2 3 4 5 6 7 1 0 1 1 0 1 1 left..