목록분류 전체보기 (114)
모눈종이에 사각사각
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xu9KG/btrPNaNnOHk/hpwlF1qkd8M6MuYJL3g3zK/img.jpg)
List에서 중복을 제거하려면 어떻게 해야할까? Set 이용하기 먼저 List를 Set으로 변경하여 중복을 제거해준다음 다시 List로 반환하는 방법이 있다. List list = List.of(1, 2, 3, 4, 5, 1, 1, 1); System.out.println("list = " + list); Set set = new HashSet(list); List list2 = new ArrayList(set); System.out.println("list2 = " + list2); /** * list = [1, 2, 3, 4, 5, 1, 1, 1] * list2 = [1, 2, 3, 4, 5] */ Stream의 distict() 이용하기 Java8부터는 Stream의 distict()를 이용해서 중..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/RNVZ6/btrPNVvVrfq/EXrat3Jo1YoPduVBTz4ip0/img.jpg)
문자열(String클래스) = 문자를 연이어 늘어놓은 것 = 문자배열(char배열) 자바에서 char 배열이 아닌 String클래스를 이용해서 문자열을 처리하는 이유는? String 클래스가 char 배열에 여러 가지 기능을 추가하여 확장한 것이기 때문! char배열과 String 클래스의 가장 큰 차이점은, String객체(문자열)는 읽을 수만 있고 수정이 불가하다는 것이다! String str = "가나다"; str += "라마바"; System.out.println("str = " + str); 위의 코드를 실행하면 str = 가나다라마바 이렇게 나오기는 하지만, 이는 새로운 내용의 문자열이 생성되어 출력되는 것이다. String 클래스의 주요 메서드 중 몇 개를 살펴볼 것이다. String sub..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bA9jCI/btrPOujTRAw/LJhpCEhrd0ER6cGj24qQWK/img.jpg)
List.of() 코딩을 하던 중, List에 add()를 했더니 UnsupportedOperationException 예외가 발생했다. List에 add를 왜 못하지..? 라는 생각에 작업하던 List의 타입을 확인해봤다. java.util.ImmutableCollections$ListN ImmutableCollections라니! 원인은 내가 리스트를 생성할 때 다음과 같이 List.of()를 사용했기 때문이었다. List list1 = List.of(1, 2, 3, 4); List.of() 메서드는 Java9 부터 지원하는 메서드이며 Immutable한 Collection이다. 따라서 add(), remove(), set(), replace() 등의 작업을 할 수 없다. (UnsupportedOper..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bvitZo/btrOQieti2a/dFJK2nx8DK8VU6wTj5Rdl0/img.jpg)
🍎[백준 9081] 단어 맞추기 문제링크 https://www.acmicpc.net/problem/9081 9081번: 단어 맞추기 입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 하나의 단어가 한 줄로 주어진다. 단어는 알파벳 A~Z 대문자로만 이루어지며 항상 공백이 없는 연속된 알 www.acmicpc.net ⚾ 코드 c = int(input()) def solution(s): k = -1 for i in range(len(s)-2, -1, -1): # 뒤에서 부터 돌면서, i가 i+1보다 작은 문자를 찾는다. if s[i] < s[i+1]: k = i break if k == -1: # 그러한 문자가 없다면, 원래 문자가 가장 큰 것. return ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/RwwlF/btrLb6Aq2kj/6RUbgLLFdQTsuc2pOQLVx1/img.jpg)
🍎[백준 16235] 나무 재테크 문제링크 https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net ⚾ 코드 import sys input = sys.stdin.readline n, m, k = map(int, input().split()) arr = [list(map(int, input().split())) for _ in range(n)] nutrients = [[5]*n for _ in range(n)] # 양분 저장 trees =..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/PWnNU/btrJKtwV90H/6AJkAxPUVAqh4QYLg2eAY0/img.jpg)
백준16926을 풀다가 deque에 rotate 메서드가 존재한다는 사실을 알게 되었다. 🍀 deque.rotate(num) deque.rotate(num) -> deque를 num만큼 회전시킨다. num이 양수일 경우, 원소들은 오른쪽으로 이동한다. num이 음수일 경우, 원소들은 왼쪽으로 이동한다. 다음과 같은 deque가 있다고 해보자. from collections import deque q = deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) rotate(2)를 해주면 양수이기 때문에 오른쪽으로 2칸 이동하게 될 것이다. q.rotate(2) 결과는 다음과 같다. [9, 10, 1, 2, 3, 4, 5, 6, 7, 8] 오른쪽으로 두 칸 이동한 것을 확인할 수 있다. 그렇다면..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cv8QEv/btrGtPE1gAr/ixtT5HR3cn55fxacUp0v2K/img.jpg)
"오버로딩과 오버라이딩의 차이가 무엇이죠?" 라고 물어오면 순간 당황한다. 분명히 알고 있는데, 내가 알고 있는 이 기능이 오버로딩인지, 오버라이딩인지 헷갈린다. 이 포스팅을 계기로 딱 기억하자. 오버로딩 -> 같은 이름, 다른 매개변수 오버라이딩 -> 상속, 재정의 🍀 오버 로딩 자바의 한 클래스 내에 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의하는 것이다. 매개변수가 다르면 이름이 같아도 서로 다른 메소드가 된다. 반면에 매개변수는 같지만 리턴타입이 다르면 오류가 발생한다. 또한 접근 제어자도 자유롭게 지정할 수 있지만, 접근 제어자만 다르다고 해서 오버로딩이 가능하지 않다. 상속의 관계에서도 오버로딩을 사용할 수 있다 오버로딩을 사용하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bcvlwJ/btrF6IxtmKI/WA1CjQHk4SP7rVkCHcwbH0/img.jpg)
백준 20056번 문제에 리스트가 연결되어 있을 경우가 전제되었다. 격자의 행과 열은 1번부터 N번까지 번호가 매겨져 있고, 1번 행은 N번과 연결되어 있고, 1번 열은 N번 열과 연결되어 있다. 이를 쉽게 구하는 방법은 다음과 같다. dx = [-1, -1, 0, 1, 1, 1, 0, -1] dy = [0, 1, 1, 1, 0, -1, -1, -1] nx, ny = (x+dx[d]*s)%N, (y+dy[d]*s)%N
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Dqoy7/btrFT3wJ9PT/hU1ak88pM0q2yWB4blSKs1/img.jpg)
🍎[백준 5547] 일루미네이션 문제링크 https://www.acmicpc.net/problem/5547 5547번: 일루미네이션 첫째 줄에 두 개의 정수 W와 H가 주어진다. (1 ≤ W, H ≤ 100) 다음 H줄에는 상근이네 집의 건물 배치가 주어진다. i+1줄에는 W개의 정수가 공백으로 구분되어 있다. j번째 (1 ≤ j ≤ w) 정수의 좌표는 www.acmicpc.net ⚾ 코드 import sys from collections import deque input = sys.stdin.readline m, n = map(int, input().split()) temp = [list(map(int, input().split())) for _ in range(n)] # 입력 받은 리스트의 위, 아래..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nN36D/btrFSilQZbB/e4lIVqa1RtnkM8m70NyAm0/img.jpg)
🍎[백준 15650] N과 M (2) 문제링크 https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net ⚾ 코드 # 조합 직접 구현 from itertools import combinations n, m = map(int, input().split()) cnt = m numbers = list(range(1, n+1)) # res = [] def combination(pre, now, m): if len(now) < m or m == 0: return..