Index 1 2 3 4 5 1. Intro => 문제해결 프로그래밍, 알고리즘 문제 2. DataBase => SQL 문제 3. The Core 4. Python => Python 문법 문제 5. Graphs
CenturyFromYear
연도를 입력 받으면 몇 세기인지 출력하는 함수 만들기
Example 1 2 3 4 5 For year = 1905, the output should be centuryFromYear(year) = 20 For year = 1700, the output should be centuryFromYear(year) = 17
My Answer 1 2 3 4 5 6 7 def centuryFromYear (year) : if year % 100 != 0 : year = year / 100 return int(year + 1 ) else : year = year / 100 return int(year)
Another Answer (Python) 1 2 def centuryFromYear (year) : return (year + 99 ) // 100
Another Answer (JS) 1 2 3 function checkPalindrome (inputString ) { return inputString == inputString.split('' ).reverse().join('' ); }
CheckPalindrome
회문인지 체크하는 함수, 앞으로 읽어도 뒤로 읽어도 똑같은 문자열이면 True 반환, 아니면 False 반환
Example 1 2 3 4 5 For inputString = "aabbaa", the output should be checkPalindrome(inputString) = ture For inputString = "abac", the output should be checkPalindrome(inputString) = false For inputString = "a", the output should be checkPalindrome(inputString) = true
My Answer 1 2 3 4 5 def checkPalindrome (inputString) : if inputString == inputString[::-1 ]: return True else : return False
Another Answer (Python) 1 2 def checkPalindrome (inputString) : return inputString == inputString[::-1 ]
Another Answer (C++) 1 2 3 bool checkPalindrome (string is) { return is == string (is.rbegin(),is.rend()); }
AdjacentElementsProduct
인접한 요소의 곱이 가장 큰 값 반환
Example 1 2 For inputArray = [3, 6, -2, -5, 7, 3], the output should be adjacentElementsProduct(inputArray) = 21
My Answer 1 2 3 4 5 6 7 def adjacentElementsProduct (inputArray) : temp = -99999999999 for i in range(len(inputArray)-1 ): result = inputArray[i] * inputArray[i+1 ] if temp < result: temp = result return temp
Another Answer (Python) 1 2 def adjacentElementsProduct (inputArray) : return max([inputArray[i] * inputArray[i+1 ] for i in range(len(inputArray)-1 )])
Another Answer (JS) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 1 function adjacentElementsProduct (inputArray ) { var prod = inputArray[0 ] * inputArray[1 ]; for (var i = 1 ; i<inputArray.length - 1 ;i++) { prod = Math .max(prod, inputArray[i] * inputArray[i+1 ]); } return prod } # 2 function adjacentElementsProduct (arr ) { return Math .max(...arr.slice(1 ).map((x,i )=> [x*arr[i]])) }
Another Answer (Java) 1 2 int adjacentElementsProduct (int [] inputArray) { return IntStream.range(1 , inputArray.length).map(i->inputArray[i]*inputArray[i-1 ]).max().getAsInt();}
ShapeArea
My Answer 1 2 3 import mathdef shapeArea (n) : return 2 * math.pow(n - 1 , 2 ) + 2 * (n - 1 ) + 1
Another Answer (Python) 1 2 def shapeArea (n) : return n**2 + (n-1 )**2
Another Answer (JS) 1 2 3 function shapeArea (n ) { return n*n + (n-1 )*(n-1 ); }
Another Answer (C++) 1 2 3 int shapeArea (int n) { return 1 + 2 * n * (n-1 ); }
# DataBase (MySQL 문법)
MonthlyScholarships
1년치 장학금이 기제되어 있는 DB에서 각 id별로 매달 장학금을 계산해서 id와 scholarship을 조회하라
Example Table Result
My Answer 1 2 3 4 CREATE PROCEDURE monthlyScholarships()BEGIN SELECT id , scholarship/12 as scholarship FROM scholarships; END
ProjectsTeam
중복되는 이름은 제거하고 이름을 오름차순으로 정렬하여 조회하라
Example Table
Result
My Answer 1 2 3 4 CREATE PROCEDURE projectsTeam()BEGIN SELECT DISTINCT name FROM projectLog ORDER BY name ; END
AutomaticNotifications
role 칼럼의 admin, premium을 제외한 행의 email을 조회하라
Example Table
Result
MyAnswer 1 2 3 4 5 CREATE PROCEDURE automaticNotifications() SELECT email FROM users WHERE role NOT IN ("admin" , "premium" ) ORDER BY email;
# The Core
# Python
Collections Truthness
Python에서 True와 False의 의미를 알 수 있는 문제
Example 1 2 3 4 5 6 xs = [()] res = [False ] * 2 if xs: res[0 ] = True if xs[0 ]: res[1 ] = True
My Answer 1 2 3 4 5 6 xs = [()] res = [False ] * 2 if xs: res[0 ] = True if xs[0 ]: res[1 ] = False
xs 리스트는 첫번째 요소로 tuple을 갖기 때문에 존재론적 관점에서 True, 리스트의 첫번째 요소인 tuple의 첫번째 요소는 아무것도 없기 때문에 존재론적 관점에서 False이다
Efficient Comparison
효과적인 비교 방법을 찾는 문제
Example 1 2 3 1. if L < x**y <=R:2. if x**y > L and x**y <=R:3. if x**y in range(L+1 , R+1 ):
My Answer 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 def func1 (x,y,L,R) : if L < x**y <=R: return True else : return False def func2 (x,y,L,R) : if x**y > L and x**y <=R: return True else : return False def func3 (x,y,L,R) : if x**y in range(L+1 , R+1 ): return True else : return False %%timeit func1(2 ,3 , 0 ,10 ) : 480 ns ± 34.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) %%timeit func2(2 ,3 , 0 ,10 ) : 763 ns ± 23.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) %%timeit func3(2 ,3 , 0 ,10 ) : 806 ns ± 45.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
func1이 가장 빠르다
Count Bits
숫자 n을 입력하면 bit수를 출력하는 함수
Example 1 2 3 n = 50 countBits(n) = 6 50(10진수) = 110010(2진수) => 6개 비트로 구성
My Answer 1 2 3 4 5 6 7 8 9 def countBits (n) : cnt = 1 rest = 0 while (n!=1 ): rest = n/2 n = int(rest) cnt +=1 return cnt
함수가 잘 작동하고 정답처리가 되긴 했지만 자꾸 return문만 써서 간결하게 하라고 해서 다음 단계로 넘어가지 못했음..
Another Answer (Python) 1 2 def countBits (n) : return n.bit_length()
저런 내장 함수가 있는지 몰랐네…
Modulus
숫자 n이 정수형이면 return 1 아니면 return -1
Example 1 2 3 4 5 n = 15 modulus(n) = 1 n = 23.12 modulus(n) = -1
My Answer 1 2 3 4 5 def modulus (n) : if isinstance(n, int): return n % 2 else : return -1
Another Answer (Python) 1 2 3 4 5 def modulus (n) : if n==int(n) : return n % 2 else : return -1
Base Conversion
n진법으로 표기된 String을 16진수로 변환하기
Example 1 2 3 4 5 6 n = '1302' x = 5 1302(5) => 202(10) => ca baseConversion('1302' ,5 ) = 'ca'
My Answer 1 2 3 4 5 6 7 8 def baseConversion (n:str, x:int) ->int: result = 0 for i, n in enumerate(n[::-1 ]): result += int(n) * pow(x, i) return hex(result)[2 :] def baseConversion (n, x) : return hex(int(n,x))[2 :]
int 함수는 숫자를 넣었을 때 정수형으로 변환하지만, 문자열 형태의 숫자와 변환하고자 하는 진법의 수를 입력하면 원하는 진법을 변환해주기도 한다
Another Answer (Python) 1 2 def baseConversion (n, x) : return format(int(n, x), 'x' )
ListBeautifier
어떠한 리스트가 들어와도 리스트의 맨 앞 요소와 맨 뒤 요소가 같거나 빈 리스트를 반환하도록 하는 함수
Example 1 2 3 4 5 6 7 a = [3 , 4 , 2 , 4 , 38 , 4 , 5 , 3 , 2 ] b = [1 ,4 ,-5 ] c = [1 ,2 ] listBeautifier(a) = [4 , 28 , 4 ] listBeatuifier(b) = [4 ] listBeatuifier(c) = []
My Answer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 def listBeautifier1 (a) : res = a[:] while res and res[0 ] != res[-1 ]: res = res[1 :-1 ] return res def listBeautifier2 (a) : res = a[:] while res and res[0 ] != res[-1 ]: a, *res, b = res return res %%timeit listBeautifier1(a) : 2.32 µs ± 193 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) %%timeit listBeautifier2(a) : 3.05 µs ± 237 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Slicing과 Unpacking으로 쉽게 풀 수 있다!
Fix Message
대소문자 고쳐주는 함수 (가장 앞 단어의 첫번째 철자를 대문자로 그리고 나머지는 소문자로)
Example 1 2 3 message = "you'll NEVER believe what that 'FrIeNd' of mine did!!1" fixMessage(message) = "You'll never believe what that 'friend' of mine did!!1"
My Answer 1 2 def fixMessage (message) : return message.lower().capitalize()
Another Answer 1 2 def fixMessage (message) : return message.upper()[0 ] + message[1 :].lower()
Cat Walk
내가 자리를 비운 사이 고양이가 내 키보드 위에 올라가 스페이스바를 마구 눌러서 띄어쓰기 간격이 너무 많이 벌어졌다. 늘어난 띄어쓰기 공간을 하나로 줄여라 (이런 말도 안되는..ㅎ)
Example 1 2 3 line = "def m e gaDifficu ltFun ction(x):" catwalk(line) = "def m e gaDifficu ltFun ction(x):"
My Answer 1 2 3 4 5 6 7 8 9 10 11 1 번def catWalk (code) : a = '' for i in code.rsplit(): a += i + ' ' return a.rstrip() 2 번from functools import reducedef catWalk (code) : return reduce(lambda x,y:x+' ' +y, [i for i in code.rsplit()])
내 머리속에서 이런 코드가 나오다니..ㅎ 근데 제출이 안되네 ㅠ
Another Answer 1 2 3 3 번def catWalk (code) : return " " .join(code.split())
이런 쉬운 함수가 있었다니..ㅎ
속도 차이 1 2 3 4 5 6 7 8 9 10 11 12 13 %%timeit catWalk(line) # 1번 3.13 µs ± 205 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) # 2번 4.51 µs ± 233 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) # 3번 1.2 µs ± 39.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) # 결론: 이미 만들어져 있는게 젤 빠르다..
Convert Tabs
문자열 안에 Tab(\t)이 들어 있다면 n번의 space로 변환하는 함수
Example 1 2 3 4 5 6 7 8 code = "\t\t\t\t\t" convertTabs(code, 1 ) = " " code = "def add(x, y)\f\treturn x + y" convertTabs(code, 4 ) = "def add(x, y)\f return x + y" code = " for x in range(20)" convertTabs(code, 100 ) = " for x in range(20)"
My Answer 1 2 def convertTabs (code, x) : return code.replace('\t' , ' ' *x)
Feedback Review
원하는 크기 이하의 문자열 단위로 쪼개주는 함수
Example 1 2 3 4 5 6 7 feedback = "This is an example feedback" size = 8 feedbackReview(feedback, size) = ["This is" , "an" , "example" , "feedback" ]
Another Answer 1 2 3 4 5 6 7 8 9 import textwrapdef feedbackReview (feedback, size) : return textwrap.wrap(feedback, size) import redef feedbackReview (feedback, size) : return re.findall('(?:\s|^)(\S(?:.{0,%d}\S)?)(?=\s|$)' % (size-2 ),feedback)
Is Word Palindrome
회문인지 확인하는 함수, 앞으로 읽어도 뒤로 읽어도 같은지 확인하는 함수
Example 1 2 3 4 5 word = "aibohphobia" isWordPalindrome(word) = true; word = "hehehehehe" isWordPalindrome(word) = false
My Answer 1 2 def isWordPalindrome (word) : return word == word[::-1 ]
Permutation Cipher
이름은 순열암호화 인데 사실상 시저 암화랑 같음. 평문하고 키를 넘겨주면 시저암호 처럼 암호화 해주는 함수
Example 1 2 3 4 5 6 7 8 9 password = "iamthebest" key = "zabcdefghijklmnopqrstuvwxy" permutationCipher(password, key) = "hzlsgdadrs" abcdefghijklmnopqrstuvwxyz || | || | || vv v vv v vv zabcdefghijklmnopqrstuvwxy
My Answer 1 2 3 def permutationCipher (password, key) : table = str.maketrans("abcdefghijklmnopqrstuvwxyz" , key) return password.translate(table)
Another Answer 1 2 3 4 5 6 7 8 9 10 11 def permutationCipher (password, key) : table = {ord('a' ) + i : ord(k) for i, k in enumerate(key)} return password.translate(table) def permutationCipher (password, key) : table = ' ' *97 +key return str(password).translate(table) def permutationCipher (password, key) : table = string.maketrans(string.lowercase, key) return str(password).translate(table)
Competitive Eating
설명 못하겠음… 예시 확인 ㄱㄱ
Example 1 2 3 t = 3.1415 , width = 10 , precision = 2 , competitiveEating(t, width, precision) = " 3.14 "
Another Answer 1 2 3 4 5 6 7 8 def competitiveEating (t, width, precision) : return '{:^{}.{}f}' .format(t,width,precision) def competitiveEating (t, width, precision) : return "{0:.{1}f}" .format(t,precision).center(width) def competitiveEating (t, width, precision) : return ('{:^{w}.{p}f}' ).format(t,w=width,p=precision)
Get Commit
유저 이름과 0, ?, +, !가 포함된 암호화 commit 문자중 4가지 symbol을 제거한 문자열을 추출하라
Example 1 2 3 commit = "0??+0+!!someCommIdhsSt" getCommit(commit) = "someCommIdhsSt"
My Answer 1 2 def getCommit (commit) : return commit.replace('0' ,'' ).replace('?' ,'' ).replace('!' ,'' ).replace('+' ,'' )
너무 일차원적인 답변이지만 잘 된다..ㅎ
Another Answer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def getCommit (commit) : return commit.lstrip('0?+!' ) def getCommit (commit) : return commit.strip('0?+!' ) def getCommit (commit) : return "" .join(filter(lambda x: x not in "0?+!" , commit)) def getCommit (commit) : return re.sub('[0?+!]' , '' , commit) def getCommit (commit) : return "" .join([c for c in commit if c.islower() or c.isupper()]) def getCommit (commit) : return re.match(r"^[0\?\+!]*(.*)$" , commit).group(1 )
Lists Concatenation
두 리스트를 연결하는 함수.
Example 1 2 3 4 lst1 = [2 , 2 , 1 ] lst2 = [10 , 11 ] listsConcatenation(lst1, lst2) = [2 , 2 , 1 , 10 , 11 ]
My Answer 1 2 3 4 5 6 7 8 9 def listsConcatenation (lst1, lst2) : res = lst1 res.extend(lst2) return res def listsConcatenation (lst1, lst2) : res = lst1 [res.append(i) for i in lst2] return res
Another Answer 1 2 3 4 def listsConcatenation (lst1, lst2) : res = lst1 res += lst2 return res
Two Teams
리스트에 있는 요소에서 [홀수번째 요소 합 - 짝수번째 요소 합 구하는] 함수
Example 1 2 3 4 students = [1 , 11 , 13 , 6 ,14 ] twoTeams(students) = 11 (1 + 13 + 14 ) - (11 + 6 ) = 11
My Answer 1 2 def twoTeams (students) : return sum(students[::2 ]) - sum(students[1 ::2 ])
Another Answer 1 2 def twoTeams (students) : return sum( (-1 )**i*I for i,I in enumerate(students))
Remove Tasks
리스트에서 n번째 요소 제거한 리스트 반환하는 함수
Example 1 2 3 4 k = 3 toDo = [1237 , 2847 , 27485 , 2947 , 1 , 247 , 374827 , 22 ] removeTasks(k, toDo) = [1237 , 2847 , 2947 , 1 , 374827 , 22 ]
My Answer 1 2 3 def removeTasks (k, toDo) : del toDo[k-1 ::k] return toDo
Print List
설명은 패스 ~ 예시를 참고해주세요~
Example 1 2 3 lst = [1 , 2 , 3 , 4 , 5 ] printList(lst) = "This is your list: [1, 2, 3, 4, 5]"
My Answer 1 2 def printList (lst) : return 'This is your list: ' + str(lst)
Another Answer 1 2 3 4 5 def printList (lst) : return f'This is your list: {lst} ' def printList (lst) : return "This is your list: {}" .format(lst)
Repeat Char
문자열과 숫자를 입력받아 입력받은 숫자만큼 반복하는 문자열을 반환하는 람다
Example 1 2 3 4 ch = '*' n = 10 repeatChar(ch, n) = '**********'
My Answer 1 repeatChar = lambda ch, n : ch *n
Get Points
채점 해주는 함수. n번째 문제가 맞으면 n점 획득, 틀리면 패널티 점수 차감.
Example 1 2 3 4 answer = [True , False , True , False , True , True ] p = 3 getPoints(answer, p) = 12 => 1 -3 + 3 -3 + 5 + 6
My Answer 1 2 3 4 5 6 7 def getPoints (answers, p) : questionPoints = lambda x,y : x+1 if (y==True ) else -p res = 0 for i, ans in enumerate(answers): res += questionPoints(i, ans) return res
Another Answer 1 2 3 4 5 6 7 def getPoints (answers, p) : questionPoints = lambda i,ans: [-p,i+1 ][ans] res = 0 for i, ans in enumerate(answers): res += questionPoints(i, ans) return res
Sort Students
성씨를 기준으로 오름차순 정렬하는 함수. (단, 성이 같으면 이름으로)
Example 1 2 3 name = ["John Smith" , "Jacky Mon Simonoff" , "Lucy Smith" , "Angela Zimonova" ] sortStudents(name) = ['Jacky Mon Simonoff' , 'John Smith' , 'Lucy Smith' , 'Angela Zimonova' ]
Another Answer 1 2 3 4 5 6 7 8 def sortStudents (students) : students.sort(key=lambda name: name.split(" " )[-1 ]) return students def sortStudents (students) : students.sort(key= lambda s : s[len(s)-(s[::-1 ]).find(" " ):] ) return students
Is Test Solvable
리스트에 있는 숫자들을 다 더하는데, 각 숫자는 각 자리수의 합을 구한 후 더한다. 그리고 그 총합이 n으로 나누어지는지 확인해주는 함수를 만든다.
Example 1 2 3 4 5 6 ids = [529665 , 909767 , 644200 ] k = 3 (5 +2 +9 +6 +6 +5 ) + (9 +0 +9 +7 +6 +7 ) + (6 +4 +4 +2 +0 +0 ) = 87 87 /3 = 0 => True
My Answer 1 2 3 4 5 6 7 def isTestSolvable (ids, k) : digitSum = lambda x : sum([int(i) for i in list(str(x))]) sm = 0 for questionId in ids: sm += digitSum(questionId) return sm % k == 0
Another Answer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def isTestSolvable (ids, k) : digitSum = lambda x: x%10 +digitSum(x//10 ) if x else 0 sm = 0 for questionId in ids: sm += digitSum(questionId) return sm % k == 0 def isTestSolvable (ids, k) : digitSum = lambda r: sum(map(int,str(r))) sm = 0 for questionId in ids: sm += digitSum(questionId) return sm % k == 0
Create Spiral Matrix
나선형 행렬을 구하는 함수. (맨 오른쪽 아래부터 시작)
Example 1 2 3 4 5 n = 3 createSpiralMatrix(n) = [[5 , 4 , 3 ], [6 , 9 , 2 ], [7 , 8 , 1 ]]
My Answer 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 def createSpiralMatrix (n) : dirs = [(-1 , 0 ), (0 , -1 ), (1 , 0 ), (0 , 1 )] curDir = 0 curPos = (n - 1 , n - 1 ) res = [[0 for j in range(n)] for i in range(n)] for i in range(1 , n * n + 1 ): res[curPos[0 ]][curPos[1 ]] = i nextPos = curPos[0 ] + dirs[curDir][0 ], curPos[1 ] + dirs[curDir][1 ] if not (0 <= nextPos[0 ] < n and 0 <= nextPos[1 ] < n and res[nextPos[0 ]][nextPos[1 ]] == 0 ): curDir = (curDir + 1 ) % 4 nextPos = curPos[0 ] + dirs[curDir][0 ], curPos[1 ] + dirs[curDir][1 ] curPos = nextPos return res import numpy as npdef createSpiralMatrix (n) : dirs = [(-1 , 0 ), (0 , -1 ), (1 , 0 ), (0 , 1 )] curDir = 0 curPos = (n - 1 , n - 1 ) res = np.zeros([n,n]) for i in range(1 , n * n + 1 ): res[curPos[0 ]][curPos[1 ]] = i nextPos = curPos[0 ] + dirs[curDir][0 ], curPos[1 ] + dirs[curDir][1 ] if not (0 <= nextPos[0 ] < n and 0 <= nextPos[1 ] < n and res[nextPos[0 ]][nextPos[1 ]] == 0 ): curDir = (curDir + 1 ) % 4 nextPos = curPos[0 ] + dirs[curDir][0 ], curPos[1 ] + dirs[curDir][1 ] curPos = nextPos return res
2번도 가능. 그러나 해당 문제에서 numpy 사용 금지. 1번에서 처음에 [[j for j in range(n)] for i in range(n)]를 했지만 계속 인덱스 오류가 남. (이유는 모르겠음..)
Another Answer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def createSpiralMatrix (n) : dirs = [(-1 , 0 ), (0 , -1 ), (1 , 0 ), (0 , 1 )] curDir = 0 curPos = (n - 1 , n - 1 ) res = [[0 ]*n for x in range(n)] for i in range(1 , n * n + 1 ): res[curPos[0 ]][curPos[1 ]] = i nextPos = curPos[0 ] + dirs[curDir][0 ], curPos[1 ] + dirs[curDir][1 ] if not (0 <= nextPos[0 ] < n and 0 <= nextPos[1 ] < n and res[nextPos[0 ]][nextPos[1 ]] == 0 ): curDir = (curDir + 1 ) % 4 nextPos = curPos[0 ] + dirs[curDir][0 ], curPos[1 ] + dirs[curDir][1 ] curPos = nextPos return res
Construct Shell
오른쪽으로 90도 회전한 산 모양 리스트를 반환하는 함수
Example 1 2 3 4 5 6 7 n = 3 constructShell(n) = [[0 ], [0 , 0 ], [0 , 0 , 0 ], [0 , 0 ], [0 ]]
My Answer 1 2 def constructShell (n) : return [[0 for j in range(2 *n-i)] if i > n else [0 ]*i for i in range(1 , 2 *n)]
Another Answer 1 2 3 4 5 6 7 8 def constructShell (n) : return [[0 ]*min(i,2 *n-i) for i in range(1 ,2 *n)] def constructShell (n) : return [[0 ] * (i - 2 * max(0 , i-n) ) for i in range(1 , 2 * n)] def constructShell (n) : return [[0 ] * (n-abs(i)) for i in range(-n+1 , n)]
Word Power
단어를 넣으면 알파벳 순서에 맞게 숫자로 치환하여 각각의 철자의 합을 구하는 함수.
Example 1 2 3 4 word = 'hello' h => 8 e => 5 l => 12 o => 15 wordPower(word) = 8 + 5 + 12 + 12 + 15 = 52
My Answer 1 2 3 def wordPower (word) : num = {b: a+1 for a, b in enumerate('abcdefghijklmnopqrstuvwxyz' )} return sum([num[ch] for ch in word])
Another Answer 1 2 3 4 5 6 7 def wordPower (word) : num = {c: ord(c) - 96 for c in word} return sum([num[ch] for ch in word]) def wordPower (word) : num = dict(zip('abcdefghijklmnopqrstuvwxyz' , range(1 , 27 ))) return sum([num[ch] for ch in word])
Cool Pairs
두 리스트의 요소간 결합으로 만들어지는 숫자 쌍이 (x,y)라 했을 때 (x*y)%(x+y)==0 인 쌍의 갯수를 반환하는 함수 단, 숫자 쌍의 합이 같은 경우가 2개 이상일 때는 하나로 취급한다.
Example 1 2 3 4 5 6 7 a = [4 , 5 , 6 , 7 , 8 ] b = [8 , 9 , 10 , 11 , 12 ] coolPairs(a,b) = 2
My Answer 1 2 3 def coolPairs (a, b) : uniqueSums = {(x+y) for x in a for y in b if (x*y)%(x+y)==0 } return len(uniqueSums)
Multiplication Table
숫자 n을 입력하면 NxN 행렬을 반환한다. (단, 1행은 1단 2행은 2단 …n행은 n단의 숫자로 구성)
Example 1 2 3 4 5 6 7 n = 5 multiplicationTable(5 ) = [[1 , 2 , 3 , 4 , 5 ], [2 , 4 , 6 , 8 , 10 ], [3 , 6 , 9 , 12 , 15 ], [4 , 8 , 12 , 16 , 20 ], [5 , 10 , 15 , 20 , 25 ]]
My Answer 1 2 def multiplicationTable (n) : return [[a for a in range(b,b*n+1 ,b)] for b in range(1 ,n+1 )]
Another Answer 1 2 3 4 5 def multiplicationTable (n) : return [range(i, n*i + 1 , i) for i in xrange(1 ,1 +n) ] def multiplicationTable (n) : return [[x*y for x in range(1 ,n+1 )] for y in range(1 ,n+1 )]
Chess Teams
두 개의 리스트를 입력값으로 받으면 각각의 리스트에서 요소 하나씩 뽑아 리스트로 짝지어 리턴해주는 함수
Example 1 2 3 4 smarties = ["Jane" , "Bob" , "Peter" ] cleveries = ["Oscar" , "Lidia" , "Ann" ] chessTeams(smarties, cleveries) = [['Jane' , 'Oscar' ], ['Bob' , 'Lidia' ], ['Peter' , 'Ann' ]]
My Answer 1 2 def chessTeams (smarties, cleveries) : return list(map(lambda x, y : [x,y], smarties, cleveries))
Another Answer 1 2 def chessTeams (smarties, cleveries) : return list(zip(smarties,cleveries))
College Courses
수강한 과목중에 빼야 하는 과목 이름의 길이만 알때 그 과목을 빼는 함수
Example 1 2 3 4 n = 7 courses = ["Art" , "Finance" , "Business" , "Speech" , "History" , "Writing" , "Statistics" ] collegeCourses(x, courses) = ["Art" , "Business" , "Speech" , "Statistics" ]
My Answer 1 2 3 4 5 def collegeCourses (x, courses) : def shouldConsider (course) : return len(course) != x return list(filter(shouldConsider, courses))
Create Histograme
요일마다 과제 수행정도를 보여주는 히스토그램을 만드는 함수.. (사실 그냥 별찍기)
Example 1 2 3 4 5 6 7 8 9 10 ch = '*' assignments = [12 , 12 , 14 , 3 , 12 , 15 , 14 ] createHistogram(ch, assignments) = ["************" , "************" , "**************" , "***" , "************" , "***************" , "**************" ]
My Answer 1 2 3 4 5 def createHistogram (ch, assignments) : return list(map(lambda x: ch*x, assignments)) def createHistogram (ch, assignments) : return [ch * x for x in assignments]
Least Common Denominator
최소공통분모 구하는 함수
Example 1 2 3 4 5 6 7 8 9 denominators = [2 , 3 , 4 , 5 , 6 ] leastCommonDenominator(denominators) = 60 2 x 3 4 5 6 ----- x ----- x ----- x ----- 1 2 1 6 => (2와 3의 최대공약수, 2x3과 4의 최대 공약수.....)
Graphs