프로그래머스 위장(clothes) 정답 코드
난이도 ★★★☆☆
힌트
이거 해시 문제가 아니고 수학문제(경우의수)입니다 ;;; 해시인줄 알고 낚여서 한참 걸렸네요. 만약 고딩으로 돌아간다면 5분 안으로 풀었을 것 같아요. 팩토리얼, 콤비네이션, 퍼무테이션 이런거 쓰는거 아니고 순수 경우의 수 문제입니다. |
이하는 코드입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int solution(String[][] clothes) {
int answer = 1;
Map<String, Integer> clothesMap = new HashMap<>();
for (String[] cloth : clothes) {
Integer count = clothesMap.get(cloth[1]);
if (count == null) {
clothesMap.put(cloth[1], 1);
} else {
clothesMap.put(cloth[1], count + 1);
}
}
for (String cloth : clothesMap.keySet()) {
int count = clothesMap.get(cloth);
answer *= (count + 1);
}
answer--;
return answer;
}
}
|
cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
프로그래머스 K번째수(commands) 정답 코드 (1) | 2019.04.15 |
---|---|
프로그래머스 베스트앨범(genres) 정답 코드 (0) | 2019.04.15 |
프로그래머스 전화번호 목록(phone_book) 정답 코드 (0) | 2019.04.15 |
프로그래머스 완주하지 못한 선수(participant) 정답 코드 (0) | 2019.04.15 |
프로그래머스 팰린드롬(Palindrome) 정답 코드 (0) | 2018.06.11 |
프로그래머스 전화번호 목록(phone_book) 정답 코드
난이도 ★★★☆☆
힌트
저는 빅오를 최대한 낮춰보려고 모든 prefix 를 hash map 에 담아서 체크했습니다. 친구는 이렇게까지 안했는데도 통과되네요. 입력크기가 작아서 그런듯합니다. |
이하는 코드입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
import java.util.HashMap;
import java.util.Map;
public class Solution {
public boolean solution(String[] phone_book) {
Map<String, Integer> prefixMap = new HashMap<>();
for (String phoneNo : phone_book) {
for (int i = 1; i <= phoneNo.length(); i++) {
String prefix = phoneNo.substring(0, i);
Integer count = prefixMap.get(prefix);
if (count == null) {
prefixMap.put(prefix, 1);
} else {
prefixMap.put(prefix, count + 1);
}
}
}
for (String phoneNo : phone_book) {
Integer count = prefixMap.get(phoneNo);
if (count > 1) {
return false;
}
}
return true;
}
}
|
cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
프로그래머스 베스트앨범(genres) 정답 코드 (0) | 2019.04.15 |
---|---|
프로그래머스 위장(clothes) 정답 코드 (0) | 2019.04.15 |
프로그래머스 완주하지 못한 선수(participant) 정답 코드 (0) | 2019.04.15 |
프로그래머스 팰린드롬(Palindrome) 정답 코드 (0) | 2018.06.11 |
codility - Fish 정답 및 해설 (0) | 2017.08.08 |
프로그래머스 완주하지 못한 선수(participant) 정답 코드
난이도 ★☆☆☆☆
힌트
동명이인에 주의할 것. 그래서 Set 대신 Map 을 써야한다. |
이하는 코드입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import java.util.HashMap;
import java.util.Map;
public class Solution {
public String solution(String[] participant, String[] completion) {
Map<String, Integer> completionSet = new HashMap<>();
for (String name : completion) {
Integer count = completionSet.get(name);
if (count == null) {
completionSet.put(name, 1);
} else {
completionSet.put(name, count + 1);
}
}
for (String name : participant) {
Integer count = completionSet.get(name);
if (count == null) {
return name;
}
if (count < 2) {
completionSet.remove(name);
} else {
completionSet.put(name, count - 1);
}
}
return null;
}
}
|
cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
프로그래머스 위장(clothes) 정답 코드 (0) | 2019.04.15 |
---|---|
프로그래머스 전화번호 목록(phone_book) 정답 코드 (0) | 2019.04.15 |
프로그래머스 팰린드롬(Palindrome) 정답 코드 (0) | 2018.06.11 |
codility - Fish 정답 및 해설 (0) | 2017.08.08 |
codility - Brackets 정답 및 해설 (0) | 2017.08.08 |
프로그래머스 팰린드롬(Palindrome) 정답 코드
난이도 ★★☆☆☆
틀리기 쉬운 입출력 예제
입력 | 출력 |
"abcdba" "a" | 1 1 |
힌트
무려 n 세제곱의 풀서치를 하는 수밖에 없다. 대신 가지치기를 잘해야한다. 1. 최대 길이를 구하는 것이므로 최대부터 서치할 것. 2. 길이 1은 서치하지 말것. |
이하는 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public int solution(String s) { for (int answer = s.length(); answer > 1; answer--) { int start = 0; int end = 0 + answer - 1; while (end < s.length()) { if (isPalindrome(s, start, end)) { return answer; } start++; end++; } } return 1; } private boolean isPalindrome(String s, int start, int end) { int diffBy2 = (end - start + 1) / 2 - 1; for (int i = 0; i <= diffBy2; i++) { char c1 = s.charAt(start + i); char c2 = s.charAt(end - i); if (c1 != c2) { return false; } } return true; } | cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
프로그래머스 전화번호 목록(phone_book) 정답 코드 (0) | 2019.04.15 |
---|---|
프로그래머스 완주하지 못한 선수(participant) 정답 코드 (0) | 2019.04.15 |
codility - Fish 정답 및 해설 (0) | 2017.08.08 |
codility - Brackets 정답 및 해설 (0) | 2017.08.08 |
알고리즘의 복잡도란? (3. 빅오 표기법) (0) | 2017.07.28 |
IDE for Kotlin : Eclipse, IntelliJ
https://kotlinlang.org/docs/tutorials/getting-started-eclipse.html
공식 가이드에 IntelliJ, Eclipse 이렇게 2개의 IDE 가 소개되어있다.
그렇다면 익숙한 Eclipse 로 !
상세는 공식 가이드를 참조하면 된다. 아주 간단하다.
1. 기존 Eclipse 에 Kotlin Plugin 설치 : Marketplace 에 검색하면 바로 나옴
2. Perspective 를 Kotlin 으로 변경
3. New - Kotlin Project
4. 생성된 프로젝트의 src 폴더 우클릭하여 New - Kotlin File
이렇게만 하면 된다.
But, 가이드를 그대로 따라한 후 Run as Kotlin Application 시 에러가 발생한다;;
"kotlin_bin which is referenced by the classpath, does not exist."
말그대로 kotlin_bin 을 못찾아서 나는 에러이다.
해결법은
1. 프로젝트 우클릭하여 Properties - Resource - Linked Resources 에서 Linked Resources 탭 선택
2. kotlin_bin 의 Location 을 본인 eclipse 의 workspace 폴더로 지정한다. 프로젝트 폴더 말고 workspace 폴더 루트. ex) C:\Users\CGun\eclipse-workspace
3. Apply and Close 클릭하면 끝
But2, Eclipse 를 쓰지 않는 것이 좋다. 기본적인 Ctrl + Space 가 거의 지원되지 않는다. 완성도가 떨어짐.
IntelliJ 버전 중 Community 버전은 무료이므로 이걸 매우매우 권장합니다.
에러해결 출처 : https://discuss.kotlinlang.org/t/in-the-eclipise-running-lib-cant-find-the-kotlin-bin/6188/2
codility - Fish 정답 및 해설
난이도 ★★★☆☆
문제 요약
최종적으로 몇 마리의 물고기가 살아남는지 리턴하기 1. A.length 가 물고기의 숫자이다. 2. index 가 각 물고기 번호인데, index 가 작을수록 강의 상류에 있다. 3. A[index] 는 각 물고기의 크기이며, 큰 녀석이 작은 녀석을 만나면 잡아먹는다. 4. B[index] 는 각 물고기의 방향이며, 0 은 상류로 가는 방향, 1 은 하류로 가는 방향이다. 5. 모든 물고기의 속도는 같다. (즉, 같은 방향끼리는 못 만난다) |
힌트
Stack 을 써야한다. 왜 써야하는지 깨달으면 절반 이상은 푼 것이다. (B[index] == 1 인 녀석들을 Stack 에 넣자) |
이하는 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | public int solution(int[] A, int[] B) { int aliveCount = 0; Stack<Integer> downFishes = new Stack<>(); for (int i = 0; i < A.length; i++) { if (B[i] == 0) { // up fish aliveCount++; if (downFishes.isEmpty()) { continue; } int downFish = downFishes.peek(); while (true) { aliveCount--; if (A[downFish] < A[i]) { downFishes.pop(); if (downFishes.isEmpty()) { break; } downFish = downFishes.peek(); } else { break; } } } else { // down fish downFishes.add(i); aliveCount++; } } return aliveCount; } | cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
프로그래머스 완주하지 못한 선수(participant) 정답 코드 (0) | 2019.04.15 |
---|---|
프로그래머스 팰린드롬(Palindrome) 정답 코드 (0) | 2018.06.11 |
codility - Brackets 정답 및 해설 (0) | 2017.08.08 |
알고리즘의 복잡도란? (3. 빅오 표기법) (0) | 2017.07.28 |
알고리즘의 복잡도란? (2. 시간 복잡도) (0) | 2017.07.28 |
codility - Brackets 정답 및 해설
난이도 ★★☆☆☆
문제 요약
괄호의 짝이 정상적으로 맞는지를 리턴. 단, 빈 문자열 입력시에도 정상이라고 리턴할 것 |
힌트
Stack 을 이용하는 전형적인 문제 1. 여는 괄호 (, {, [ 는 push 2. 닫는 괄호 ), }, ] 는 pop 3. stack 이 비어있을 때 pop 하면 에러 발생함. 주의할 것 |
이하는 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | public int solution(String S) { Stack<Character> stack = new Stack<>(); for (int i = 0; i < S.length(); i++) { char c = S.charAt(i); if (c == '(' || c == '{' || c == '[') { stack.push(c); } else { if (stack.isEmpty()) { return 0; } char lastC = stack.pop(); if (c == ')' && lastC != '(') { return 0; } if (c == '}' && lastC != '{') { return 0; } if (c == ']' && lastC != '[') { return 0; } } } if (!stack.isEmpty()) { return 0; } return 1; } | cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
프로그래머스 팰린드롬(Palindrome) 정답 코드 (0) | 2018.06.11 |
---|---|
codility - Fish 정답 및 해설 (0) | 2017.08.08 |
알고리즘의 복잡도란? (3. 빅오 표기법) (0) | 2017.07.28 |
알고리즘의 복잡도란? (2. 시간 복잡도) (0) | 2017.07.28 |
알고리즘의 복잡도란? (1. 공간 복잡도) (0) | 2017.07.28 |
알고리즘의 복잡도란? (3. 빅오 표기법)
1. 공간 복잡도 (Space complexity)
2. 시간 복잡도 (Time complexity)
3. 빅오 표기법 (Big-O notation)
복잡도를 표현하는 단위입니다.
거리의 단위에 km 가 있고, 무게의 단위에 kg 이 있듯
복잡도의 단위로는 O 가 있습니다.
공간 복잡도와 시간 복잡도 둘 다에 사용되며
최악의 경우를 가정하여 나타냅니다.
최악이 무슨 말인지 아래 예시를 보여드리겠습니다.
1 2 3 4 5 6 7 8 9 | public boolean contains(int[] arr, int num) { for (int i = 0; i < arr.length; i++) { if (arr[i] == num) { return true; } } return false; } | cs |
위 함수의 경우, 운이 좋으면 한번만에 찾아서 return true가 될 수도 있고,
운이 최악이면 arr 전체를 다 뒤져야할수도 있습니다.
Big-O 는 이 최악을 가정하여 나타내므로
O(n) 이 위 함수의 시간 복잡도입니다.
n 은 뭐냐면 입력받은 배열의 길이를 뜻합니다.
또 특이한 점은 상수는 간소화한다는 것입니다.
O(k * 1) => O(1)
O(k * n) => O(n)
O(n + k) => O(n)
O(k * n제곱) => O(n제곱)
아래 함수를 예로 들겠습니다. (함수 내용 이해할 필요 없음)
시간 복잡도는 "2n + 2" 이지만 (n + n + 2)
Big-O 표기법으로는 O(n) 입니다.
공간 복잡도는 "n + 3" 이지만 (checked, i => n + 2 + 1)
Big-O 표기법으로는 O(n) 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public int solution(int[] A) { boolean[] checked = new boolean[A.length + 2]; for (int i = 0; i < A.length; i++) { checked[A[i]] = true; } for (int i = 1; i < checked.length; i++) { if (!checked[i]) { return i; } } return -1; } | cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
codility - Fish 정답 및 해설 (0) | 2017.08.08 |
---|---|
codility - Brackets 정답 및 해설 (0) | 2017.08.08 |
알고리즘의 복잡도란? (2. 시간 복잡도) (0) | 2017.07.28 |
알고리즘의 복잡도란? (1. 공간 복잡도) (0) | 2017.07.28 |
codility - Triangle 정답 및 해설 (0) | 2017.07.12 |