자료구조와 알고리즘/알고리즘
-
완탐자료구조와 알고리즘/알고리즘 2024. 4. 12. 23:53
진법 변환 보기 회문인 수에서는 볼게 딱히 없었다. 팰린드롬 검사할때 length/2해야한다는 것 정도 ACM호텔 몫과 나머지 이용해서 문제 풀 때 1~H /H -> 1로 맞춰주고 싶어 -> 1~H구간을 1로 원래는 H만 1임 -> (-1)/h +1 나누기 구간 맞추기 (경계값다르고, 몫이 0이 아닌 1부터 시작하고싶을 때) -> 나머지 구간 맞추는 것도 같은 방법 사용함 (나머지 결과랑 나누는 수 맞춰주고 싶을 때, 0~h-1나머지 아니고 1-h 나머지로) H+1 ~ 2H =>2로 나오는데 110과 111 똑같이 11호로 배정 판화 방문 남기는 기본 스킬! 행운의 바퀴.. 시계방향이면 반대로 보이는게 맞구낭 환형일 경우! 배열을 연결된 것 처럼 사용하는 스킬 배워가자 마지막부터 하는 법
-
자알인 - 스택 & 큐자료구조와 알고리즘/알고리즘 2024. 1. 30. 12:08
1. 유효한 괄호 - 내 풀이(1ms) public boolean isValid(String s) { //먼저들어간 괄호는 무조건 이전 괄호와 짝이어야함 //사실상 거의 뭐 팰린드롬 검사지 char[] chararr = s.toCharArray(); Deque deq = new ArrayDeque(); for(char p : chararr){ if(p == '(' || p == '[' || p == '{'){ deq.push(p); }else{ if(deq.isEmpty()){ return false; } if(p == ')' && deq.peek() == '('){ deq.pop(); }else if(p == ']' && deq.peek() == '['){ deq.pop(); }else if(p == ..
-
자알인 (1) 코딩테스트 팁자료구조와 알고리즘/알고리즘 2024. 1. 3. 00:56
- 연습장과 필기도구를 준비하는 것이 좋다 - 코드 스피넷을 만들어두면 좋다 : 본인이 어려웠던 알고리즘 위주, 복습과 원리를 학습하는 차원에서도 좋고, 사용할 수 있다면, 빠르게 가져올 수 있음 - 타임아웃오류 : 자바는 거의 자유로우나, 자바의 컬렉션을 사용하면 타임아웃이 발생하는 경우도 있으니 조심하자 - 예외처리 조심하자 (null값 참조 등 -> 실수하는경우 종종 발생) - 본인만의 시간제한을 두고 푸는 연습을 하는 편이 좋다 - REPL로 코드를 검증하는 연습도 해두면 좋다고함! 2. 자바 자료형 -> 속도면에서 당연히 원시자료형이 연산이 빠름 ex) 배열에 데이터 1억개 집어넣고, 찾는 연산 -> 원시(int -> 삽입:128밀리초,탐색:26밀리초, Integer:847밀리초, 46밀리초) ..
-
다이나믹 프로그래밍자료구조와 알고리즘/알고리즘 2023. 4. 13. 22:33
- 큰 문제를 작은 문제로 나누어 푸는 알고리즘이다. - 큰 문제를 작은 문제로 쪼개는 알고리즘은 다이나믹 프로그래밍과 분할정복이 있다. 두 알고리즘의 차이는 문제를 작은 문제로 만들었을 때, 분할정복과 다르게 dp는 중복이 가능하다는 점이다. (따라서 중복을 잘 다뤄야한다.) - 문제가 두 가지 속성을 만족해야 다이나믹 프로그래밍으로 문제를 풀 수 있다. 1. overlapping Subproblem (겹치는 작은 문제) 2. optimal substructure (최적부분구조) - 1번 속성에 의해 문제를 큰 문제와 작은 문제로 쪼갤 수 있어야하고, 큰 문제와 작은 문제는 같은 방식으로 풀 수 있어야한다. - 2번 속성에 의해 문제의 정답을 작은 문제의 정답에서 구할 수 있다. -> 최적부분구조를 만..
-
여러가지 수학자료구조와 알고리즘/알고리즘 2023. 4. 11. 09:34
나머지 연산: (a+b)%m = ((a%m)+(b%m))%m (a*b)%m = ((a%m)*(b%m))%m (a-b)%m = ((a%m)-(b%m)+m)%m; //음수나머지 나올 수 있다 -> +m한번 해주면 양수로만 나옴 *C(JAVA)와 python 나머지 구하는 방식 차이 c와 java는 나머지를 버림, python은 내림을 이용한다. -GCD,LCM GCD -> 유클리드 호제법 O(logN) //재귀호출 public int getGCD(int a, int b) {if(b == 0) return a; else return getGCD(b,a%b); } //반복문 pulbic int getGCD(int a, int b){ while(b != 0){ int r = a%b; a=b; b=r; } } N개..
-
스택과 문제들 풀면서 얻은..자료구조와 알고리즘/알고리즘 2023. 4. 5. 14:07
스택과 관련 문제들을 풀어보았다. 문제를 풀면서 얻은 점들 한눈에 볼 수 있도록 정리하려고 작성했다. 스택은 LIFO구조. 저장된 데이터의 마지막 값이 의미있는 경우에 사용하면 편하다! -얻은점 >테스트케이스 주어질때는 바로 입출력하는 방식이 좋다. --단어 뒤집기 1,2 ★--- >문자열 다룰 때 자바 eof (입력,파일 스트림으로부터 모두 읽기) while((input=readLine()) !=null) while((input=read()) !=-1) while(scanner.hasNext()) > 문자열을 중심으로 입력을 받고 char[]로 변환해서 사용하는 것이 훨씬 편한듯하다. read() --쪼끔구리다 readLine() 개행무시 - char[] 다룰때 필요하다면 미리 추가해두자. > 스택에 ..
-
프코전-자바편 1~2장자료구조와 알고리즘/알고리즘 2023. 3. 30. 21:31
1장 -코드를 짤 때 흔히하는 실수 코드를 짤 때 가독성과 역할을 충분히 고려하지 못하고 쌓아올리기 시작하면, 어느순간 코드를 수정하는 것 보다 갈아 엎는 것이 나을 때가 생긴다. 이러한 상황을 방지하기 위해서 코드를 작성할 때 가독성과 역할을 신경 쓰며 문제를 단계별로 나누어 해결해보자 -디버깅과 시행착오 줄이기 > 코드를 단계별로 작성하라 > 하나의 단계를 작성하고 검증하라 > 단계 검증이 실패하면, 실패한 단계에서 더 자세히 로그를 찍어보자 - 실습 -전화번호부 만들기 사용자가 입력한 전화번호를 가진 사람들을 전화번호부에서 검색하는 기능을 구현해보자 처음에는 입력과 검색 모든 과정을 한 번에 생각하면서 코드를 작성하려 할 것이다. 이는 가독성이 떨어지는 코드 작성의 시발점이다. 전화번호를 검색하는 ..