Python 202

[Python] 프린터

def solution(priorities, location): answer = 0 printer = [(i, j) for i, j in enumerate(priorities)] while True : x = printer.pop(0) if any(x[1] < q[1] for q in printer) : printer.append(x) else : answer += 1 if x[0] == location : return answer 1. 입력받은 priorities를 enumerate를 이용하여 인덱스와 우선순위를 튜플로 printer 리스트 에 넣어준다. ex) priorities = [1, 2, 3, 1] 이면 printer = [(0,1), (1, 2), (2, 3), (3, 1)] 이 됨 2. p..

[Python] 다음 큰 숫자

def solution(n): one_1 = bin(n).count('1') while True : n += 1 one_2 = bin(n).count('1') if one_1 == one_2 : break return n 1. bin함수를 사용하여 n을 2진수로 바꾸고 1의 갯수를 구한다. --> one_1 2. while문을 통해 n에 1을 더하고, 2진수로 바꿔 1의 갯수를 구한다. --> one_2 3. 그래서 one_2가 one_1의 값과 같다면 반복문을 중지하여 n을 출력하고, 다르다면 2번을 반복한다.

[Python] 124 나라의 숫자

def solution(n): answer = '' number = "124" while n>0 : n -= 1 answer = number[n%3] + answer n = n // 3 return answer 1. 각 index를 1을 빼준 후, 3으로 나눈 나머지를 '124'의 index로 가진다. ex) 30번째 -> 29 -> 124[2] = 4 ➡︎ 4 2. 위에서 나눈 몫에 대해 1을 빼고 3으로 다시 나눈 나머지를 '124'의 index로 가지며 앞의 값의 앞쪽에 붙여준다. ex) 9 -> 8 -> 124[2] = 4 ➡︎ 44 3. 2번을 반복한다. ex) 2 -> 1 -> 124[1] = 2 ➡︎ 244 ✔︎ 1을 빼는 이유 : 인덱스는 0부터 시작하기 때문 1 빼주지 않으면 10진법에서..

[Python] 자연수 뒤집어 배열로 만들기

def solution(n): answer=[] a = str(n) for i in a : answer.append(int(i)) answer.reverse() return answer 처음엔 이렇게 풀었는데 더 간단하게 풀 수 있을 것이라 생각해서 나온 풀이 def solution(n): return list(map(int, reversed(str(n)))) 내장함수인 map과 reversed를 써주면 더 간단하게 해결 가능하다 ✔︎ map : 함수와 반복 가능한 자료형을 입력으로 받는다 ✔︎ reversed : 리스트를 뒤집는다. ++ 리스트(문자열)를 뒤집는 또 다른 방법 : 확장 슬라이싱 -> list[::-1] 을 해주면 뒤집힌다.

[Python] 완주하지 못한 선수

def solution(participant, completion): participant.sort() completion.sort() for i in range(len(completion)) : if participant[i] != completion[i] : return participant[i] return participant[-1] 1. 먼저 participant, completion을 정렬한뒤, 2. for 문으로 두 리스트의 인덱스 0부터 시작하여 값들을 비교해 나간다. 3. if문을 활용해 두 값이 같지 않으면 participant[i]를 str형태로 반환해준다. 4. 위의 if문에 걸리지 않는다면, 완주하지 못한 선수가 participant 리스트의 마지막에 있는 경우이므로 이를 반환해준..

[Python] 문자열 내 마음대로 정렬하기

def solution(strings, n): answer = sorted(sorted(strings), key = lambda x : x[n]) return answer 처음에 for문 돌리다가 더 간단하게 할 방법 없을까 머리 쥐어짠 문제 풀이 1. 먼저 strings를 sorted로 해주어 정렬해준뒤 2. 람다 식을 이용해 n 번째 문자로 다시 정렬해준다. 왜 sorted를 두 번 해줄까? 문자열 2번째 기준으로 정렬되었으나, 2번째 문자열이 같을 경우, 사전 순으로 정렬되어야 하는데 그것이 적용 되어 있지 않다. (abce와 abcd 중 사전적으로는 abcd가 앞) 따라서 sorted를 한 번 더 해준다.