Algorithm 306

#올바른 괄호

import java.util.Scanner; import java.util.Stack; public class Main { public String solution(String str) { String answer = "YES"; //(()(()))(() //괄호 문제는 대부분 stack //stack에서 여는 괄호는 push 닫는 괄호는 pop //끝났는데 남아있거나 닫아야하는데 비어있으면 NO //끝났는데 비어있으면 YES Stack stack = new Stack(); for(char x : str.toCharArray()){ if(x == '(') stack.push(x); else { //닫는 괄호가 많은 상황 //여는 괄호를 pop 시켜줘야 짝이 맞음! if(stack.isEmpty()) r..

Algorithm/inflearn 2021.09.17

★K번째 큰 수(TreeSet)

사용법을 기억. import java.util.Collections; import java.util.Scanner; import java.util.TreeSet; public class Main { public int solution(int a, int b, int[] arr) { //K번째 수가 존재하지 않으면 -1를 출력 int answer = -1; //★중복 제거와 정렬을 하려면 TreeSet을 이용하면됨 TreeSet Tset = new TreeSet(Collections.reverseOrder()); //Collections.reverseOrder()은 내림차순.. 기본 값은 오름차순 //i < a 이라고 해도 되는이유는 for문 k for문 j for문에서 거짓이 되버리니까 이렇게 해도 상관..

Algorithm/inflearn 2021.09.16

★모든 아나그램 찾기(Hash, sliding Window : 시간복잡도 O(n))

import java.util.HashMap; import java.util.Scanner; public class Main { public int solution(String a, String b) { int answer = 0; HashMap am = new HashMap(); HashMap bm = new HashMap(); //bacaAacba //abc //bm 먼저 세팅(abc) for(char x : b.toCharArray()) bm.put(x, bm.getOrDefault(x, 0) + 1); //b 한개 전만큼 am을 세팅 -> two pointer 사용을 위해서(ba) int L = b.length()-1; //2 for(int i = 0; i < L; i++) am.put(a.cha..

Algorithm/inflearn 2021.09.16

★아나그램(Hash)

import java.util.HashMap; import java.util.Scanner; public class Main { public String solution(String s1, String s2) { String answer = "YES"; HashMap map = new HashMap(); for(char x : s1.toCharArray()) { map.put(x, map.getOrDefault(x, 0)+1); } for(char x : s2.toCharArray()){ //키가 없거나 value 값이 이미 0이면 아나그램이 아님 //마지막 문자돌 때 그 키의 value 값이 0이 아니어야함!! if(!map.containsKey(x) || map.get(x) == 0) return "..

Algorithm/inflearn 2021.09.15

#학급 회장(Hash)

import java.util.HashMap; import java.util.Scanner; public class Main { public char solution(int n,String s) { char answer = ' '; HashMap map = new HashMap(); for(char x : s.toCharArray()) { //x라는 키값을 가져오고 값이 없으면 0 넣어라 //첫번째 map.put(x, map.getOrDefault(x, 0)+1); } int max = Integer.MIN_VALUE; //키 값 뽑아 내기 for(char key : map.keySet()) { /*System.out.println(key + " " + map.get(key));*/ if(map.get(..

Algorithm/inflearn 2021.09.15

★최대 길이 연속부분수열

import java.util.Scanner; public class Main { public int solution(int n, int m, int[] arr){ int answer = 0, cnt = 0, lt = 0; // cnt는 0을 1로 바꾼 횟수 for(int rt = 0; rt m) { //1로 바꾼 횟수가 초과하면(0을 m번 초과해서 만나면) if(arr[lt] == 0) cnt--; //0인 지점을 찾아서 줄여줌 lt++; } //rt-lt+1은 1이 연속된 연속부분수열의 길이 answer = Math.max(answer, rt-lt+1); } //rt=0일 때 그냥 r..

Algorithm/inflearn 2021.09.15

연속된 자연수의 합(two pointers)

1.lt, rt 이용 import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public int solution(int n){ int answer=0, lt=0, sum=0; int m = n/2+1; // 8 int[] arr = new int[m]; // 입력 15 출력 3 // 15일때 8까지만 보면됨 8 9는 볼필요 X // (2로 나눈 나머지=7 + 1 -> 8 까지만 돌리면됨 for(int i=0; i0){ cnt++; // 2일 때 / 3일 때 / 4일 때 n=n-cnt; // n은 12 / n은 9 / n은 5 if(n%cnt==0) { answer++; } } retu..

Algorithm/inflearn 2021.09.14

★공통원소 구하기

import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public ArrayList solution(int n, int m, int[] a, int[] b){ ArrayList answer = new ArrayList(); //오름차순 정렬 Arrays.sort(a); Arrays.sort(b); int p1 = 0, p2 = 0; //포인터 //왜 배열이 끝나면 끝나는 가를 생각할것. while (p1 < n && p2 < m) { // 둘 중 배열이 끝나면 끝 if(a[p1] == b[p2]) { // 공통 원소를 찾았으면 둘 다 증가 answer.add(a[p1++]); p2+..

Algorithm/inflearn 2021.09.13