목록분류 전체보기 (91)
눈송이의 개발생활
유클리드 호제법이 뭘까? 두 수의 최대공약수를 구하는 알고리즘이다. 💡 호제법 : 두 수가 서로 상대 수를 나눠서 원하는 수를 얻는 알고리즘 두 양의 정수 a, b (a>b)에 대해서 r = a % b (r은 a를 b로 나눈 나머지) 이라고 하면, a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 반복적으로, rr = b % r 이라고 하면, rr, rrr, ...이 0이 될 때까지 이 과정을 반복한다. rr이 0이면 a, b의 최대 공약수는 r이 된다. 유클리드 호제법을 예시를 통해서 보자! 📌 2058과 1071의 최대공약수 구하기 먼저, 큰 수(2058)를 작은 수(1071)로 나눈다. 2058 % 1071 = 987 나머지(987)가 0이 아니기 때문에, 1071을 987로 나누고 이 과정을 ..
문제 - 정수 제곱근 판별 https://programmers.co.kr/learn/courses/30/lessons/12934 내 코드 def solution(n): sqrt = n**(1/2) if sqrt.is_integer() : return (sqrt+1)**2 else: return -1 다른 사람 풀이 def solution(n): sqrt = n**(1/2) if sqrt % 1 == 0: return (sqrt+1)**2 else: return -1 해결 방법 n에 제곱근을 씌우고 정수로 떨어지는 숫자를 찾을 때 is_integer() 함수를 사용했었다. float type의 수가 정수(int)인지 아닌지 확인할 때 사용하는 함수라고 한다. return 값은 boolean! 다른 사람의 ..
문제 - 짝수와 홀수 https://programmers.co.kr/learn/courses/30/lessons/12937 내 코드 def solution(num): if num % 2 == 0: return "Even" else: return "Odd" 다른 사람 풀이 def solution(num): return num % 2 and "Odd" or "Even" 해결 방법 이 문제를 보면서 프로그래머스 레벨 1 문제들은 코드를 간결하게 쓰는 것을 연습하는 용도이라는 것을 알았다. 쉽게 풀 수 있었지만 다른 사람이 쓴 풀이를 보면 감탄이 나왔다. 어떻게 저렇게 심플하고 예쁘게 코드를 바로 짤 수 있는거지....😮 아래 풀이를 더 설명해보자면, 파이썬은 앞에서부터 논리 연산을 한다고 한다. 예를 들어 n..
문제 - 2016년 https://programmers.co.kr/learn/courses/30/lessons/12901 내 코드 day = ['FRI','SAT','SUN', 'MON','TUE','WED','THU'] end = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] def solution(a, b): answer = day[(sum(end[:a-1]) + b-1) % 7] return answer 다른 사람 풀이 import datetime def solution(a, b): date = 'MON TUE WED THU FRI SAT SUN'.split() return date[datetime.datetime(2016, a, b).weekday()] 해..
문제 - 행렬의 덧셈 https://programmers.co.kr/learn/courses/30/lessons/12950 내 코드 def solution(arr1, arr2): answer = [] for i in range(len(arr1)): answer.append([]) for j in range(len(arr1[0])): answer[i].append(arr1[i][j] + arr2[i][j]) return answer 다른 사람 풀이 def solution(arr1, arr2): answer = [[c + d for c, d in zip(a, b)] for a, b in zip(arr1, arr2)] return answer 해결 방법 나는 이중 for문으로 복잡하게 풀었는데 다른 사람의 풀..
프로그래머스 Lv.1 문제를 풀다가 처음 보는 함수가 있어서 정리하려고 한다. 행렬의 덧셈이라는 문제였는데, 나는 이중 for문을 돌면서 각각 원소를 더했지만, 다른 사람의 풀이를 보니 zip()을 이용해서 심플하게 풀었었다. 아래와 같이 나의 코드는.... 정말 길고 복잡하고 못생겼다. 코드가 확 깨끗해지는 함수라서 공부해보았다. # 내 풀이 def solution(arr1, arr2): answer = [] for i in range(len(arr1)): answer.append([]) for j in range(len(arr1[0])): answer[i].append(arr1[i][j] + arr2[i][j]) return answer # 다른 사람 풀이 def solution(arr1, arr2)..
Hashmap이란? Hashing된 map 객체를 map에 넣는 것 💡 Map은 무엇인가? MAP : key & value를 가진 자료구조. key와 value를 쌍으로 보관 KEY : map에 유일하게 (중복되지 않게) 존재. 동일한 key가 들어오면 기존의 쌍 대체 VALUE : 중복 가능. key를 통해서 값을 볼 수 있음 💡 Hashing은 무엇인가? key 값을 hash function에 대입해서 계산된 결과를 주소로 사용하여 value에 접근할 수 있게 함 Java에서의 HashMap //선언 import java.util.HashMap; HashMap map = new HashMap(); ✅ 값 추가 // key, value map.put("A", 100); map.put("B", 101);..
문제 https://www.acmicpc.net/problem/1991 코드 import sys input = lambda : sys.stdin.readline().strip() def preorder(root): if root == '.': return print(root, end="") preorder(tree[root][0]) preorder(tree[root][1]) def inorder(root): if root == '.': return inorder(tree[root][0]) print(root, end="") inorder(tree[root][1]) def postorder(root): if root == '.': return postorder(tree[root][0]) postorder(..