프로그래머스 - 모의고사

모의고사 문제 바로가기 나의 풀이 bruteforce 문제는 문제 이해만 잘 하면 솔직히 구현의 영역이다. PS에서 list을 다룰 때에 enumerate가 굉장히 유용하고 자주 쓰이기에 잘 활용하는 것이 중요하다. 아래 풀이에서는 그냥 1, 2, 3번 학생의 찍는 번호를 a,b,c array로 만들고 하나씩 확인하는 방법을 택했다. score=[0,0,0]으로 선언하고 각 자리에 1,2,3번 학생의 점수를 더해주면 나중에 오름차순하는 소요가 줄어서 풀이가 간편해진다. def solution(answers): a = [1,2,3,4,5]*2000 b = [2,1,2,3,2,4,2,5]*1250 c = [3,3,1,1,2,2,4,4,5,5]*1000 score = [0,0,0] for i, ans in enumerate(answers): if a[i] == ans: score[0] += 1 if b[i] == ans: score[1] += 1 if c[i] == ans: score[2] += 1 answer = [] for i, s in enumerate(score): if s == max(score): answer.append(i+1) return answer 다른 사람의 풀이 구경하기 순환주기 고려해주기 pattern1[idx%len(pattern1)] 처럼 각각의 순환 주기로 index을 나누어주면 큰 숫자에 대해서도 정답을 구할 수 있다. a = [1,2,3,4,5]*2000처럼 안해도 되어서 메모리 절약 가능! ...

2023-7-31 · 1 min · 210 words · Junha

프로그래머스 - 최소직사각형

최소직사각형 문제 바로가기 나의 풀이 enumerate 함수로 input을 쪼개주고 각 케이스별로 최대/최소를 각각 따져주었다. 다만 어떤건 가로가 길고 어떤 건 세로가 더 길기 때문에 모두 가로가 더 길도록 정렬해주는 작업이 추가로 필요했다. def solution(sizes): max_w, max_h = 0, 0 for _, wh in enumerate(sizes): w,h = max(wh),min(wh) if w > max_w: max_w = w if h > max_h: max_h = h return max_w * max_h 고수의 풀이 def solution(sizes): return max(max(x) for x in sizes) * max(min(x) for x in sizes) 출처 다른 분들의 풀이를 구경했는데, 두줄로 끝내버린 분들도 계셨다. input으로 들어오는 값들 중에 큰 값의 최댓값과, 작은 값의 최댓값의 곱이 곧 정답이기에 위처럼 풀 수도 있다. 하지만 메모리 사용량이 늘어나서 과연 좋은 풀이인지에 대해서는 생각해볼 필요가 있다. ...

2023-7-31 · 1 min · 118 words · Junha

LeetCode 1870. Minimum Speed to Arrive on Time

LeetCode 1870. Minimum Speed to Arrive on Time 🗓️ Daily LeetCoding Challenge July, Day 26 (23.07.26) 으아아… bruteforce로 풀었더니 TLE (Time Limit Exceeded)… 그래서 binary-search로 풀어도 여전히 TLE. 하… C++나 Java는 잘만 통과하는거 같은데 ‘[1,1,10000000]’ 같은 예시가 나오면 time complexity가 $ O(10^7) $ 이 되어버려서 파이썬은 삐빅- 실패!를 외친다ㅜㅜ binary search 이분 탐색 풀이 아래 코드처럼 깔끔하게 풀었는데도 TLE 오류가 떴다. 아무래도 함수 따로 하는 것 조차도 시간 복잡도에 기여하는듯, 한번에 코드를 작성하는 식으로 다시 재구성해보기로 했다. ...

2023-7-26 · 2 min · 245 words · Junha

LeetCode 852. Peak Index in a Mountain Array

LeetCode 852. Peak Index in a Mountain Array 🗓️ Daily LeetCoding Challenge July, Day 25 (23.07.25) LeetCode에서는 일명 Daily Challenge를 제공하는데, 하루에 하나씩 풀어나가면 다양한 알고리즘 문제들을 풀어볼 수 있어서 유익하다. 보통 다른 문제들은 Editoral 부분이 잠금되어있어 Premium User가 아니면 읽지 못하는데, Daily Challenge만큼은 공개되어 자신의 풀이와 비교해볼 수 있다. LeetCode에 입문한지 이제 겨우 3일이지만, 다른 알고리즘 사이트에 비해서 체계가 확실히 잘 잡혀있어서 유저들에게 매우 편리하게 다가온다. 이번 문제는 배열의 증가하다가 감소하는 수열의 극값의 index을 구하는 문제다. 보자마자 이분탐색(binary-search) 알고리즘을 사용해야겠다고 생각이 들었다. 문제 조건에서도 O(logn) 시간 복잡도를 사용하라고 제시되어있기에 확신을 가지고 문제를 풀었다. ...

2023-7-25 · 2 min · 251 words · Junha

PyTorch로 시작하는 딥러닝

AI 기술이 발달함에 따라 다양한 딥러닝 모델들이 등장하고 있다. 이를 구현하기 위한 여러 딥러닝 프레임워크가 있는데, 2023년 현재 기준으로 실질적 강자는 바로 PyTorch이다. 이 프레임워크의 기본 구조와 활용법에 대해 알고 실제 프로젝트에 뛰어들기 위해서 PyTorch에 대한 첫 책으로 골랐다. Pytorch는 Facebook에서 지원하는 딥러닝 프레임워크인데, 경쟁 상대로 Google에서 지원하는 Tensorflow와 Keras가 있다. 그 외에는 거의 사용되지 않고 있어서 사실상 두 프레임워크가 딥러닝 진영의 pie를 나눠 먹고 있는 셈이다. 사실 이 싸움은 이전부터 판세가 Pytorch 쪽으로 기울고 있다. 예전부터 학술쪽에서는 세밀한 조절이 가능한 PyTorch을 애용해왔다. 하지만 최근 산업에 추세도 이런 경향을 따라가고 있다. Google에서는 위기의식을 느낀 것인지 Kaggle이나 Colab와 같은 서비스에서 Tensorflow을 적극적으로 밀어주고 있는데, 내 생각엔 끝이 보이는 싸움 같다. 머지 않아 Tensorflow는 구글의 실패한 기술 중 하나로 언급될지도 모르겠다. ...

2023-7-25 · 2 min · 291 words · Junha