기본기 다지기 57

[프로그래머스] 달리기 경주 (파이썬, 시간복잡도 개선)

[문제]callings에 등장하는 항목을 앞 항목하고 바꿔치기하는 문제였다.시간복잡도를 고려하는 게 문제의 포인트였다.   [코드]처음에는 아무 생각 없이 아래와 같이 코드를 짰다. def solution(players, callings): for i in callings: f_index = players.index(i) j = players[f_index-1] players[f_index] = j players[f_index-1] = i return players for문 안에서 i의 인덱스 찾아서 앞 항목과 바꿔치기하는 방법을 사용했다.   [왜 틀렸나]시간초과가 떴다.players의 길이가 50,000개 이하, callings의 길..

[프로그래머스] 옹알이(2) (파이썬)

내 풀이를 바탕으로 지피티와 함께 조금 다듬어봤다.  [문제]애기가 옹알이로 할 수 있는 말의 개수를 구하는 문제였다.아직 4가지 단어만 말 할 수 있고, 애기기 때문에 연속해서 같은 단어를 발음하지 못한다.   [코드]내 코드이다.먼저 슬라이싱으로 처리하기 위해서 2글자 단어('ye', 'ma')와 3글자 단어('aya', 'woo')가 등장했을 때의 2가지 경우로 나눴다.각 경우에서 babble의 앞 단어가 애기가 발음할 수 있는 단어이면, front_word라는 단어에 그 단어를 추가하고 babble에서 그 단어를 없애줬다. 여기서 추가한 단어가 기존의 front_word 단어와 같으면 발음할 수 없으므로 break.babble의 앞단어가 애기가 발음할 수 없는 단어여도 바로 break.babble..

[프로그래머스] 햄버거 만들기 (파이썬)

시간초과로 오류가 나서, 그리고 내 코드도 마음에 들지만 다른 사람 코드가 더 깔끔해보여서 기록해본다. [문제]애니팡 같은 문제였다. 특정 패턴이 반복되면 팡 터지고 지워져서 붙여지면 다시 팡 터지고를 반복하는 문제였다.  [코드]while로 리스트 안에서 돌면서 1231이 지워지면 i를 앞으로 당겨서 풀었다.처음에 1231이 지워진다음 i-=3로 설정하지 않고 i=0으로 설정했더니 시간초과가 떴다.i=0 으로 설정하면 배열이 길어질 경우에 앞에서부터 무의미한 반복이 일어나서임을 깨닫고 i-=3로 바꿔줬다.최대 3 인덱스 이하($\because$123일 경우)에는 다시 지워질 가능성이 없기 때문이다.def solution(ingredient): answer = 0 i = 0 while i..

[선형대수] Exercise 3.6 ~ 3.10

공부하는 단계에서 정리한 내용입니다.잘못된 내용이 있다면 말씀해주시면 감사하겠습니다.https://mml-book.github.io/book/mml-book.pdf [3.6]  [3.7]  [3.8]    [3.9] 코시슈바르츠 부등식($| \langle x,y \rangle | \leqslant \| x \| \| y \| $)을 사용해서 증명하는 문제였다.a는 $x$에 $x_{1}, x_{2}, ..., x_{n}$을, $y$에 $y = 1,1, ..., 1$을 넣고 풀면 되었고,b는 $x$에 $\sqrt{x_{1}}, \sqrt{x_{2}}, ..., \sqrt{x_{n}}$을, $y$에 $y = \frac{1}{\sqrt{x_{1}}}, \frac{1}{\sqrt{x_{2}}}, ..., \fra..

[선형대수] Exercise 3.1 ~ 3.5

공부하는 단계에서 정리한 내용입니다.잘못된 내용이 있다면 말씀해주시면 감사하겠습니다.https://mml-book.github.io/book/mml-book.pdf  [3.1] $\langle x,y \rangle$이 내적임을 증명하는 문제였다. Def 3.2와 Def 3.3을 바탕으로 풀었다.Positive definite, symmetric, bilinear 를 만족하는지 각각 체크해주었다.   [3.2] 3.1과 비슷하지만 $\langle x,y \rangle$이 내적인지 알아보는 문제였다.똑같이 Positive definite, symmetric, bilinear 를 만족하는지 각각 체크해주었다. $\therefore$ Symmetric하지 않으므로 inner product가 아니다.  [3.3]..

[프로그래머스] 대충 만든 자판 (파이썬)

[문제]대충 만든 천지인 자판으로 특정 문자열을 출력하려면 몇 번 자판을 눌러야 하는지 구하는 문제였다.  [코드]def solution(keymap, targets): answer_lst = [] apb = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' lst = [0] * 26 # 각각의 알파벳에 접근할 수 있는 가장 빠른 인덱스 찾기 for key in keymap: for i in range(len(key)): if lst[apb.index(key[i])] != 0: lst[apb.index(key[i])] = min(i+1, lst[apb.index(key[i])]) else: ..

[프로그래머스] 숫자 짝꿍 (파이썬)

내 풀이가 나름 마음에 들어서 기록해본다. [문제]  [코드]def solution(X, Y): # X_lst, Y_lst: X, Y 숫자세기용 리스트 / lst: 겹치는 숫자세기용 리스트 X_lst, Y_lst, lst = [0] * 10, [0] * 10, [] # X, Y에 있는 숫자들의 개수 세줌 for i in X: X_lst[int(i)] += 1 for i in Y: Y_lst[int(i)] += 1 # 특정 숫자가 X, Y에 모두 들어있으면 둘 중에 적은 개수만큼 lst에 저장해줌(e.g. 55, 2) for i in range(10): if X_lst[i] != 0 and Y_lst[i] != 0:..

[프로그래머스] 평행 (파이썬)

[문제]점 4개 중에 임의로 2개씩 선택했을 때, 서로 평행한 경우가 있는지 알아보는 문제였다.정답률 53%의 문제였다.[유의한 점](y2 - y1) / (x2 - x1) == (y4 - y3) / (x4 - x3) 형식으로 나누기를 사용하면x1 == x2 일 때 0으로 나누면서 오류가 날까봐 곱셈 형태로 바꿔줬다. [코드]def solution(dots): answer = 0 # [[x1, y1],[x2, y2],[x3, y3],[x4, y4]] = dots x1 = dots[0][0] y1 = dots[1][0] x2 = dots[2][0] y2 = dots[3][0] x3 = dots[0][1] y3 = dots[1][1] x4 = dots[2][1]..

[프로그래머스] 겹치는 선분의 길이 (파이썬)

[문제]겹치는 선분의 길이를 구하는 문제였다.입출력 예는 아래와 같다.정답률 60% 문제였다.linesresult[[0,1],[2,5],[3.9]]2[[-1,1],[1,3],[3,9]]0[[0,5],[3,9],[1,10]]8 [풀이 방법]1. a,b값이 -100이상 100이하이기 때문에, 냅다 [0]으로 구성된 리스트 lst를 만들어줬다. 2. 그 다음에 각각의 선분에 대해서 for문을 적용해서 돌려줬다. 3. for문 안에 for문을 또 넣어서 a(line[0])와 b(line[1]) 사이의 모든 값에 해당하는 lst의 인덱스에 +1을 하도록 했다. 4. 겹치는 부분의 길이를 구하기 위해서, lst 중 값이 2 이상인 부분의 개수를 세어주었다. 5. 세어준 개수가 답! [코드]def solution(l..

[선형대수] 3.9 Rotations ~ 3.9.4 Properties of Rotations

공부하는 단계에서 정리한 내용입니다.잘못된 내용이 있다면 말씀해주시면 감사하겠습니다.https://mml-book.github.io/book/mml-book.pdf 3.9 RotationsSecion 3.4에서 orthogonal transformation matrix를 가지는 linear mapping들의 2가지 특징인 length, angle preservation에 대해서 공부했다.이번에는 rotation을 설명하는 특별한 orthogonal transformation matrix에 대해서 공부할 것이다. Rotation은 평면을 $\theta$만큼 회전시키는 linear mapping(유클리드 공간의 automorphism)이다.$\theta > 0$이면 반시계방향으로 회전시킨다.아래 그림은 $R..