Algorithm 30

파이썬 functools

파이썬 functools 안에 코테할때 쓰기 좋은 함수들이 있는 거 같아 정리해보고자 한다. 1. cmp_to_key from functools import cmp_to_key def compare(a, b): print(a, b) if a > b: return 1 elif a < b: return -1 else: return 0 print(sorted([4, 1, 3, 2], key=cmp_to_key(compare))) # Comparing 1, 4 # Comparing 3, 1 # Comparing 3, 4 # Comparing 3, 1 # Comparing 2, 3 # Comparing 2, 1 # [1, 2, 3, 4] 이거도 자바랑 마찬가지로 a, b 에 거꾸로 들어오고 리턴값이 - 이면 순서..

Algorithm/파이썬 2022.07.01

[Programmers - 자바] 가장 큰 수

https://programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 참 골치아픈 정렬이다. 일단 숫자끼리 비교하기에는 너무 신경쓸게 많아서 문자열 바꿔서 compareTo 함수로 비교를 하려고 했다. 근데 다들 힘들어하듯(나만 어렵나) 3 이랑 30 이랑 34 이거 비교할때 34 > 3 > 30 이다. 매우 매우 짜증난다. 어떻게 할까 생각한게 34 랑 3 비교할때..

자바 comparator

comparator 를 처음부터 끝까지 설명하기는 너무 기니까 그냥 내가 햇갈렸던거 쓸것이다. custom comparator 를 구현할 때 비교하는 게 항상 헷갈렸는데 헷갈린 이유가 있었다. {1,5} 를 정렬할 때 Comparator 안에서 "o1 = 5" "o1 = 1" 로 매개변수가 들어온다. 생각했던거랑 반대로 들어오기 때문에 늘 헷갈려서 죽었던 것이다. "거꾸로 인자가 들어오는데 비교를 하고 리턴이 음수일때 위치를 바꿔라" 로 반드시 기억해두자. c++ 처럼 좀 직관적으로 했으면 참 편할텐데... 아 그리고 람다식으로 쓰는 표현도 알아두자. Arrays.sort(arr, (o1,o2) -> { ...... return 양수하던가 음수 하던가 }); TreeSet ts = new TreeSet(..

Algorithm/자바 2022.03.30

[백준 12904 - c++] A와 B

https://www.acmicpc.net/problem/12904 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 보자마자 거꾸로 가면 된다는 거는 알았는데 치명적인 예외가 있었다. t 가 s 보다 짧은 예외도 들어올 수 있다;;;;; 그 예외를 처리해주니 맞았다! 코드를 보면 심플하니 바로 이해가 될 것이다. #include #include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(0)..

Algorithm/Baekjoon 2022.03.30

[Programmers - 자바] 구명보트

https://programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 누가 봐도 그리디 하다. 두명씩만 탈 수 있는 제한 조건때문에 투 포인터 식으로 풀어보았다. 코드를 보자. import java.io.*; import java.util.*; class Solution { public int solution(int[] people, int limit) { int answer = 0; long sum =..

[Programmers - 자바] 거리두기 확인하기

https://programmers.co.kr/learn/courses/30/lessons/81302 코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr 일일히 다 확인하다가 한번 죽고나서 생각을 바꾸었다. 거리두기 위반하는 경우는 응시자 간의..

[Programmers - 자바] 문자열 압축

https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 그동안 문제는 많이 풀었는데 오랜만에 포스팅한다. 정말 문자열 처리하는 문제 꽤 많이 풀었다고 생각했는데 역시 할 때마다 너무 어렵고 힘들다. 호다다닥 풀어야 하는데 너무 오래걸린다. 매번 적응이 안돼 하... 풀이를 해보자. 큰 틀을 보면 int answer = 1001; String ans = ""; 으로 선언하고 문자열을 압축한 것을 ans 에 넣고..

자바 Map

자바 Map 에 대해서 알아보자. Map 인터페이스에는 HashTable, TreeMap, HashMap, 그리고 HashMap 을 상속받는 LinkedHashMap 이 있다. 여기서 HashTable 은 null 값을 넣을 수 없고 thread safe 한데 코딩테스트 문제 푸는데는 thread safe 할 필요가 없다. 그래서 HashTable 은 버리고 TreeMap, HashMap 그리고 LinkedHashMap 에 대해 알아보자. TreeMap, HashMap, LinkedHashMap 은 Set 에 있는 그것들과 똑같다. TreeMap 은 트리구조로, HashMap 은 무순서로 LinkedHashMap 은 집어넣은 순서로 저장된다. HashMap 은 생성할때 초기용량을 넣어줄 수 있고 Tree..

Algorithm/자바 2022.03.09

자바 String & StringBuilder

어느덧 코딩테스트 준비를 c++ 에서 자바로 어느정도 넘어오게 되었다. 넘어오면서 매우 괴로웠다. c++ 에서 힘든 점은 string 다루기가 힘들다는 거였는데 자바는 좀 더 편한 줄 알았는데 아니었다. 똑같이 힘들다... 하.... 넘어온 이유 중에 절반은 string 때문인데.. 하여간 자바의 String 을 간단하게 정리를 해보자 자바의 String 은 불변 객체이다. 그래서 String 에 뭔가 변화를 주는 연산을 하게 되면 변하는 게 아니고 새로운 객체를 만들어서 대입하는 형식으로 이루어진다. 그래서 코테 문제를 풀다보면 가끔 메모리 초과가 난다! 루프 안에서 String 의 변화를 주는 연산을 하면 계속해서 객체가 새로 생성되기 때문에 메모리 초과가 나는 것이다. 이걸 막기 위해, 그리고 St..

Algorithm/자바 2022.03.07

자바 iterator

자바의 iterator() 인터페이스이다. 매우 간단하게 구성되어있다. 사용법을 보자면 Set s = new TreeSet(); Iterator iterator = s.iterator(); while(iterator.hasNext()){ Do something with iterator.next() or iterator.remove() } 이런 꼴로 쓰인다. 여기 예시에는 Set 으로 했지만 iterable 인터페이스 아래에 있는 모든 것들이 된다. 간단하다! 특히 set 에 있는 원소를 출력하려면 이런식으로 해야한다. 자료구조마다 상속받은 iterator 안에서 몇몇 메소드가 추가되어 있지만 웬만하면 이런 식으로 쓰인다.

Algorithm/자바 2022.03.07