'항해 중' 카테고리의 글 목록 (23 Page)
본문 바로가기

항해 중267

시간 복잡도 판단하기 시간 복잡도란? : 입력값과 문제를 해결하는 데 걸리는 시간과의 상관관계를 말한다. (입력값과 결과값이 나오는 데까지 걸리는 시간을 말한다.) 입력값이 2배로 늘어났을 때 문제를 해결하는 데 걸리는 시간은 몇 배를 늘어나는 지 보는 것이다. 우리는 시간이 적게 걸리는 알고리즘을 좋아하니 입력값이 늘어나도 걸리는 시간이 덜 늘어나는 알고리즘이 좋은 알고리즘이겠죠? 시간 복잡도를 계산 할 때 입력값은 함수의 크기가 변경 될 수 있는 값을 말한다. 그렇기 때문에 다음 문제에서는 array가 입력값이다. 보통 array(입력값)의 길이는 N으로 표현하고, 각 줄이 실행되는 걸 1번의 연산이 된다라고 표현한다. 최댓값 찾기 알고리즘의 시간 복잡도를 판단 해보자면 첫번째 방법의 시간 복잡도는 input = [3, .. 2021. 11. 12.
최빈값 찾기 알고리즘과 친해지기 2 - 최빈값 찾기 : 위에서 풀었던 알파벳의 빈도수 세기를 활용해서 가장 많은 빈도수의 문자를 반환하는 문제이다. 1) 의사코드(수도코드) - 최대값을 담을 변수 생성 => max - 알파벳의 빈도 수를 담은 배열 생성 alphabet_occurrence_array = [0] * 26 - 문자인 지 아닌 지 구별하는 함수 => str.isalpha()를 사용해서 문자이면 true를 반환, 문자가 아니면 false를 반환 - 문자를 숫자(아스키 코드)로 변환하는 함수 => ord("문자") - 해당 문자의 index 위치를 찾아서 1씩 더한다. => ord('a') - ord('a')를 하면 0이라는 index 값이 나온다. - 배열을 돌면서 가장 큰 값을 가진 인덱스 위치를 찾는다... 2021. 11. 12.
알파벳 빈도수 세기 알고리즘과 친해지기 2 - 알파벳 빈도수 세기 : 문자열을 입력 받았을 때 어떤 알파벳이 가장 많이 포함되어 있는 지 반환한다. -> 문자인 지 확인하는 방법 : 파이썬의 내장 함수 str.isalpha()를 이용하면 해당 문자열이 알파벳인 지 확인 할 수 있다. -> 알파벳 별로 빈도수를 리스트에 저장하기 : 우선 알파벳 빈도수를 저장하기 위한 길이가 26인 0으로 초기화된 배열을 만든다. -> 아스키 코드를 사용해서 문자를 숫자로 변환 하거나 숫자를 문자로 변환 할 수 있다. 문자를 아스키 코드로 변환 할 때는 "python char to ascii code"라고 검색을 해보면 ord 함수를 사용하라고 나온다. 1) 의사코드(수도코드) - 알파벳의 빈도 수를 담은 배열 alphabet_occurren.. 2021. 11. 12.
최댓값 찾기 알고리즘과 친해지기 1 - 최댓값 찾기 문제 : 배열 안에 있는 요소 중에서 최댓값을 찾아 반환하는 문제 1) 의사코드(수도코드) - 최댓값을 담을 변수 => max - 배열의 요소들을 하나씩 빼온다. => for 반복문 - 값을 비교해서 더 큰 값을 max 변수에 담는다. => if문 - 최댓값을 담은 max 변수의 값을 return 한다. 2) 코드 구현 input = [3, 5, 6, 1, 2, 4] def find_max_num(array): # 큰 값을 담을 변수 max = 0 # or max = array[0]도 가능하다. # 배열에 값들을 하나씩 뽑아온다. for num in array: # 값을 비교해서 더 큰 값을 변수에 담는다. if(max < num): max = num return .. 2021. 11. 12.
알고리즘이란? 알고리즘이란? 어떤 문제를 해결하기 위해서 입력된 자료를 토대로 하여 원하는 출력을 유도하여 내는 규칙의 집합 여러 단계의 유한 집합으로 구성되는 데, 각 단계는 하나 또는 그 이상의 연산을 필요로 한다. => 어떤 문제가 있을 때, 그것을 해결하기 위한 여러 동작들의 모임(여러 방법들의 집합) => 특정 문제에 대한 해결법이 뭐가 가장 효율적인 지, 어느 경우에 효율적인 지 고민하는 것이 알고리즘이다. 알고리즘을 공부해야 하는 이유는? 1. 좋은 개발자가 되고 싶다면 : 좋은 개발자는 좋은 프로그램을 구현 할 줄 아는 사람이고, 좋은 프로그램이란 적은 공간을 이용해서 빠른 속도를 수행하는 프로그램이다. 그런 프로그램을 만들기 위해서는 특정 자료구조나 접근 방법을 필요로 한다. (알고리즘, 자료구조 필요.. 2021. 11. 12.
[TIL] 11일차 11일차 시간표 오전 9:00 ~ 체크인 오전 9:00 ~ 오후 11:00 알고리즘 문제 풀기(프로그래머스) 오후 11:00 ~ 오후 12:00 점심식사 오후 12:00 ~ 오후 1:00 알고리즘 문제 풀기(프로그래머스) 오후 1:00 ~ 오후 1:30 14일 알고리즘 시험 세팅 오후 1:30 ~ 오후 2:00 항해99 동아리 첫 모임 강의 오후 2:00 ~ 오후 5:00 알고리즘 1주차 강의 오후 5:00 ~ 오후 6:00 저녁시간 오후 6:00 ~ 오후 9:00 알고리즘 1주차 강의 오후 9:00 ~ 오후 9:30 알고리즘 1주차 강의 복습 용어 정리 1. 정규 표현식 문법 : 정규식을 사용해서 특수문자를 제거하는 문제를 풀 때 보았는 데 문법을 알아두면 추후에 유용할 것 같아서 정리 https://.. 2021. 11. 12.
5일차 → 신규 아이디 추천(정규표현식, replace(), slice(), charAt(), repeat()) 문제설명 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다. 다음은 카카오 아이디의 규칙입니다. 아이디의 길이는 3자 이상 15자 이하여야 합니다. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다. "네오"는 다음과 같이 7단계의 순차적인 처리 과정을 통해 신규 유저가 입력한 아이디.. 2021. 11. 12.
5일차 → 소수 만들기(소수 판별식) 문제 설명 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 한다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때 nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하세요. 제한사항 - nums에 들어있는 숫자의 개수는 3 이상, 50개 이하입니다. - nums의 각 원소는 1 이상, 1,000 이하의 자연수이며, 중복된 숫자는 들어있지 않습니다. 문제 해석 문제를 봤을 때 고려해야 하는 부분은 2가지였다. 1) (서로 다른 수) 세 개를 구한다. 2) 더해서 새로운 배열에 담는다. 3) 소수가 되는 경우의 수를 구한다. (소수가 되지 않는 숫자의 개수를 구했다.) - 1보다 작거나 같으면 안된다. - 2부터 N-1까지 .. 2021. 11. 12.
4일차 → 문자열 내 마음대로 정렬하기(return 1/-1/0, localCompare()) 문제 설명 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 제한사항 - strings는 길이 1 이상, 50 이하인 배열입니디ㅏ. - strings의 원소는 소문자 알파벳으로 이루어져 있습니다. - strings의 원소는 길이 1 이상, 100이하인 문자열입니다. - 모든 strings의 원소의 길이는 n보다 큽니다. - 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 다른 사람이 푼 문제 풀이 functio.. 2021. 11. 11.
728x90