python 1 2 3 4 5 6 7 8 9 10 11 from itertools import combinationsdef 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문은 실행되지 않는다.
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 mathdef 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)