알고리즘

    TIL] 알고리즘 공부

    오늘의 알고리즘 공부 오늘도 어제와 마찬가지로 프로그래머스의 알고리즘 문제를 풀었습니다! 프로그래머스 오늘 푼 문제 ( level 1) 하샤드 수 콜라츠 추측 문자열을 정수로 바꾸기 서울에서 김서방 찾기 수박 수박 수박 수박수? 소수 찾기 내적 음양 더하기 백준 예제 백준 1316 ( 그룹 단어 체커)(복습) 오늘도 프로그래머스 문제를 중점으로 공부를 하였습니다! 백준 예제에서 푼 문제는 처음에 풀지 못한 문제여서 해석을 했었던 문제인데 다시 접근을 해보았습니다! 하지만 이번에 풀었을 때도 조금 어려웠고 풀이를 보고 해석을 했을 때 처음 공부했을 때 이해 안 되었던 부분이 이해되어서 의문점이 풀렸습니다! 알고리즘은 아직 어렵고 지금 내가 하는 공부법이 맞는지 알 수 없어서 여러 가지 공부방법을 찾아보고 ..

    TIL] 알고리즘 문제풀이[백준] (10773번, 10828번, 1929번, 1934번, 9012번)

    알고리즘 문제풀이 10773번 # 재민이는 돈을 실수로 잘못 부르는 사고를 침 # 재현이는 재민이가 잘못된 수를 부를 때 0 을 외쳐 재민이가 가장 최근에 재민이가 쓴 수를 지우게함 (pop) # 재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고싶어함 sum([]) n = int(input()) # 재민이가 부를 수 n_list = [] # 재민이가 부른 수의 저장소 for i in range(n): true_n = int(input()) # 재민이가 부른 수 if true_n == 0: n_list.pop() # 0을 외치면 가장 최근에 재민이가 쓴 수를 지움 else: n_list.append(true_n) # 0을 외치지 않았다면 저장소에 추가해줌 print(sum(n_list)) 108..

    TIL]알고리즘공부법

    TIL 오늘은 지금까지 풀었던 문제들을 다시 풀어보았습니다! 확실히 문제를 다시 풀어보니 제가 전에 풀었을 때 놓쳤던 부분들을 다시 되돌아볼 수 있게 되었습니다. 다시 풀면서 느꼈던 점은 물론 모든 문제들이 맞지는 않았지만 난이도가 저에게 맞는 수준인 문제들을 풀다 보니 처음에는 접근하지 못했던 문제들을 다시 풀어봤을 때 비록 모든 문제가 정답은 아니었지만 제가 문제에 접근할 수 있게 되었습니다! 내일은 스택과 큐, 재귀 함수, 정렬 같은 개념들을 다시 한번 복습하고 저에게 맞는 난이도의 문제를 찾아서 문제를 풀어봐야 할 것 같습니다! 오늘 문제를 다시 풀면서 느낀 점은 위에서 언급했듯이 처음에는 너무 어려웠던 알고리즘 문제들을 다시 풀어보니 시간은 오래 걸렸지만 문제에 접근할 수 있었던 게 뿌듯했습니다..

    TIL] 알고리즘 문제풀이[백준] (8958번, 2908번, 2455번, 1546번, 1157번)

    알고리즘 문제풀이 8958번 # O가 들어오면 처음엔 1 연속으로 들어오면 1+2+3....하다가 X가 들어오면 +0 다시 O가 들어오면 +1 + 2 n = int(input()) for i in range(n): a = input() a_list = list(a) # a를 리스트화 시켜준다. cnt = 1 # O가 들어오면 처음에 들어올 때 1을 더해줘야하기 때문에 cnt의 초기 값은 1 total = 0 # cnt 를 전부 더해준 값 for j in a_list: if j == "O": # 만약 j 가 O 면 total += cnt # total = cnt + 1 cnt += 1 # cnt = cnt+1 else: cnt = 1 # j 가 X 면 cnt 를 1로 초기화 print(total) 2908..

    TIL] 알고리즘 문제풀이[백준] (1152번, 1157번)

    알고리즘 문제풀이 1152번 # 영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 문자열에 몇 개의 단어가 있는지 출력 중복도 세어야한다 # 띄어쓰기를 기점으로 단어가 나뉜다. words = list(map(str, input().split())) print(len(words)) 1157번 # 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성 단, 대문자와 소문자 구분 x # 입력 : 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어짐 # 출력 : 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력 단, 가장 많이 사용된 알파벳이 여러개 존재하는경우 ?를 출력 # 문제 접근 방식 : 대소문자 구분을 하지 않기 위해 모두 ..

    TIL] 알고리즘 기초

    알고리즘 성능 평가 시간 복잡도 : 특정한 크기의 입력에 대하여 알고리즘의 수행 시간 분석 공간 복잡도 : 특정한 크기의 입력에 대하여 알고리즘의 메모리 사용량 분석 동일한 기능을 수행하는 알고리즘이 있다면, 일반적으로 복잡도가 낮을수록 좋은 알고리즘입니다. 빅오 표기법 : 가장 빠르게 증가하는 항만을 고려하는 표기법 , 항수의 상한만을 나타내게 됩니다. 그리디 알고리즘 (탐욕 법) 그리디 알고리즘(탐욕 법)은 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미합니다! 일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구합니다. 그리디 해법은 그 정당성 분석이 중요한데 단순히 가장 좋아 보이는 것을 반복적으로 선택하더라도 최적의 해를 구할 수 있는지 검토가 필요..

    TIL] 알고리즘 문제풀이 [백준] (1037, 2609, 10250)

    알고리즘 문제풀이 1037번 # 양수 A가 N의 진짜 약수가 되려면, N 이 A의 배수이고, A가 1 과 N이 아니어야 한다. # 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램 # N은 약수의 개수 N = int(input()) A = list(map(int, input().split())) max_number = max(A) min_number = min(A) print(max_number * min_number) # 약수가 모두 주어지기 때문에 가장 작은 값과 가장 큰 값을 곱하면 진짜 수를 구할 수 있다. 2609번 # 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수 구하기 # 문제 접근 방식 : # 최대공약수: a 와 b의 최대공약수는 b 와 a를 나눈 나머지의 최대공약수..

    TIL] 알고리즘 문제 풀이 [백준] (2941, 2839, 1436)

    알고리즘 문제 풀이 2941 cro = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="] # 크로아티아 알파벳 리스트입니다. word = input() for i in cro: # cro 리스트의 원소를 i에 넣어줍니다. word = word.replace(i, '*') # i 즉, input 을 받은 word 에 i 가 포함되어있다면 *로 바꿔줍니다. print(len(word)) # 문자열로 바꿔준다면 cro 에 두글자~세글자를 한 글자로 인식합니다! 2839 sugar = int(input()) cnt = 0 # 설탕을 몇 번 담았는지 나타내는 저장소 while sugar >= 0: # 설탕을 담은 갯수가 0보다 크거나 같을 때 까지 True if sugar ..

    TIL] 알고리즘 문제 풀이 [백준](1110 , 2586, 2884, 2941, 4344, 4673, 10869)

    알고리즘 문제 풀이 10869번 # 10869 번 input = input().split(' ') num_a = int(input[0]) num_b = int(input[1]) print(num_a + num_b) print(num_a - num_b) print(num_a * num_b) print(num_a // num_b) print(num_a % num_b) 4673번 # 4673 번 def d(n): n = n + sum(map(int, str(n))) # n = 2 -> 2 + 2 : 4 // n = 33 - > 33 + 3 + 3 : 39 # map 에서 int 로 데이터 타입을 지정했기 때문에 str(n) 도 나뉘고 int 가 된다. return n a = [0] * 10001 # a를 10..

    TIL ] 스택 , 큐, 해쉬

    스택 스택이란 한쪽 끝으로만 자료를 넣고 뺄 수 있는 자료 구조입니다. ( 가장 처음에 넣은 것이 마지막에 나오고 가장 마지막에 넣은 것이 가장 처음에 나옵니다. Last In First Out이라 해서 LIFO라고도 불립니다! 큐 한 쪽 끝으로 자료를 넣고, 반대쪽에서는 자료를 뺄 수 있는 선형구조입니다. 가장 처음에 넣은 것이 가장 빨리 나오고 가장 마지막에 넣은 것이 가장 늦게 나옵니다. First in First Out이라 해서 FIFO라고도 불립니다! 해쉬 컴퓨팅에서 키를 값에 매핑할 수 있는 구조입니다! 파이썬의 딕셔너리를 생각하시면 됩니다! 딕셔너리를 해쉬 테이블이라고 부르기도 합니다! 키를 통해 바로 데이터를 받을 수 있어 속도가 빨라집니다! 알고리즘은 너무 어렵지만 확실히 공부를 계속하다..