두개 뽑아서 더하기

python

1
2
3
4
5
6
7
8
9
10
11

from itertools import combinations

def solution(numbers):
answer = []
# 미리 내림차순으로 정렬
com_num = combinations(numbers, 2)
list_num = list(set([sum(x) for x in com_num]))
list_num.sort()
return list_num

java

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
import java.util.ArrayList;
import java.util.Arrays;

class Solution {
public int[] solution(int[] numbers) {
ArrayList<Integer> list = new ArrayList<Integer>();

for(int i=0; i<numbers.length; i++){
for(int j=i+1;j<numbers.length; j++){
int a = numbers[i]+numbers[j];
if (list.indexOf(a) < 0){
list.add(a);
}
}
}

int[] answer = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
Arrays.sort(answer);

return answer;
}
}

arr.indexOf(searchElement[, fromIndex])

배열 내의 요소의 최초의 인덱스. 발견되지 않으면 -1.

스킬트리

python

1
2
3
4
5
6
7
8
9
10
11
def solution(skill, skill_trees):
answer = 0
for skills in skill_trees:
skill_list=list(skill)
for i in skills:
if i in skill:
if i != skill_list.pop(0):
break
else:
answer+=1
return answer

for-else
for문에서 break가 발생하지 않았을 경우의 동작을 else문에 적어주는 것이다.

for문 안에서 break가 발생한다면 else문은 실행되지 않는다.

124 나라의 숫자

3진법의 개념을 가지고 풀어야하는 문제이다.

python

1
2
3
4
5
6
7
def solution(n):
answer = ''
while n > 0:
n -=1
answer = '124'[n%3] + answer
n = n // 3
return answer

java

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public String solution(int n) {
String answer = "";
String str = new String("124");

while(n>0){
n -= 1;
answer = str.charAt(n%3) + answer;
n = n / 3;
}
return answer;
}
}

시간초과

str.charAt(n%3) 해당부분의 시간소요 너무 많음

java 2차답안

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public String solution(int n) {
String[] num = {"4", "1", "2"};
String answer = "";

while (n > 0) {
answer = num[n % 3] + answer;
n = (n - 1) / 3;
}

return answer;
}
}

멀쩡한 사각형

수학적 사고관념이 중요했던 문제

사각형의 개수 = w * h

선이 지나는 사각형의 개수 = w + h - 최대공약수(w,h)

python

1
2
3
import math
def solution(w,h):
return w*h - (w+h - math.gcd(w,h))

참고사항

함수 값또는 기능
math.factorial(x) x의 계승(팩토리얼)
math.gcd(a, b) a와 b의 최대공약수
math.floor(x) x의 소수점 아래를 버린다
math.ceil(x) x의 소수점 아래를 올린다
math.pow(x, y) x의 y 승
math.sqrt(x) x의 제곱근
math.log(x, base) base를 밑으로 하는 x의 로그
math.sin(x) x 라디안의 사인
math.cos(x) x 라디안의 코사인
math.tan(x) x 라디안의 탄젠트
math.degrees(x) x 라디안을 도(°) 단위로 변환한다
math.radians(x) x 도(°)를 라디안 단위로 변환한다

문자열 압축

python

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
def solution(s):
length = []
result = ""

if len(s) == 1:
return 1
for cut in range(1, len(s) // 2 + 1):
count = 1
tempStr = s[:cut]

for i in range(cut,len(s), cut):
if s[i:i+cut] == tempStr:
count += 1
else:
if count == 1:
count = ""
result += str(count) + tempStr
tempStr = s[i:i+cut]
count = 1
if count == 1:
count = ""
result += str(count) + tempStr
length.append(len(result))
result = ""
return min(length)

range(a,b,c)
a부터 b 까지 c의범위로

ex)

1
2
3
4
5
for i in range(1,10,3):
print(i)
# 1,
# 4
# 7