분류 전체보기

    TIL] 알고리즘 공부

    오늘의 알고리즘 공부 오늘은 백준 사이트의 알고리즘 문제를 풀지 않고 프로그래머스의 알고리즘 문제를 풀었습니다! 백준 사이트의 알고리즘 문제는 난이도가 지금은 제가 풀기에 역부족이었고 문제를 풀다가 막히기 일쑤였고 막히고 해설을 보고 해설을 해석하는 것도 물론 도움은 되지만 한계가 있는 것 같고 그렇게 해설을 해석한 문제들을 다시 풀려고 접근했을 때 그때도 어려움이 있었기에 프로그래머스에서 문제풀이를 진행하였습니다. 프로그래머스 level 1을 선택한 이유는 만약 문제의 난이도가 매우 어려움 -> 중간 -> 쉬움 순서가 있다면 프로그래머스 level 1 난이도는 저에게 중간 정도 난이도와 쉬움 정도의 난이도가 섞여있기 때문입니다! 확실히 처음에는 제 기준 중간정도의 문제를 풀었을 때 접근하는 법이 쉽지 ..

    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라고도 불립니다! 해쉬 컴퓨팅에서 키를 값에 매핑할 수 있는 구조입니다! 파이썬의 딕셔너리를 생각하시면 됩니다! 딕셔너리를 해쉬 테이블이라고 부르기도 합니다! 키를 통해 바로 데이터를 받을 수 있어 속도가 빨라집니다! 알고리즘은 너무 어렵지만 확실히 공부를 계속하다..