Share
Sign In
TIL 웹개발
TIL 웹개발 - 유연한 사고를 가져라
서경태
👍
알고리즘 조금 풀어봤다고 모든걸 알고리즘으로 풀려고 하기 시작했다.
펠린드롬 관련 문제를 백트래킹으로 풀면 결국 풀리는거 아냐? 하고 시작했는데...
파이참이 계산을 하다가 꺼져버렸다...
그래서 아 이건 안되겠구나 싶어.. 다시 코드를 작성했다.
조금만 더 유연한 사고를 가지면 사실 펠린드롬은 1/2로 충분히 계산할 수 있고 경우의 수가 아니면 굳이 백트레킹을 사용할 필요도 없다.
결국 내가 작성한 코드는
def solution(food): food_lst = [] food_arr = [] for i in range(1, len(food)): food_lst.append(food[i] // 2) for j in range(len(food_lst)): for _ in range(food_lst[j]): food_arr.append(j+1) answer = map(str, food_arr + [0] + food_arr[::-1]) return ''.join(answer)
시간 복잡도는 O(n^2)다.
이상한거에 매몰되어 시간을 낭비하지 말자. 공부시간이 줄어든다.
Subscribe to 'kyugntae-ai'
Welcome to 'kyugntae-ai'!
By subscribing to my site, you'll be the first to receive notifications and emails about the latest updates, including new posts.
Join SlashPage and subscribe to 'kyugntae-ai'!
Subscribe
👍
Other posts in 'TIL 웹개발'See all
서경태
TIL 웹개발 - Django 시작하기
배운대로 써보는 djano 시작하기 기본적인 세팅부터 앱을 등록하는 방법까지 정리해본다. 아래 코드들은 모두 터미널에서 진행된다. 디렉토리를 잘 확인하고 진행해야한다. 가상 환경을 만들어준다. 가상 환경을 만들어주는 이유는 여러 프로젝트를 진행하는 경우 각 프로젝트의 버전을 유지하기 위해서다. A프로젝트에서 쟝고 3.2를 쓰고 B프로젝트에서 쟝고 4.2를 쓴다면 가상환경만 바꿔주면 문제 없이 작동한다.(고 한다. 안해봄.) Django를 설치한다. 이때 버전은 4.2를 설치하는데 이유는 LTS이기 때문인다. Django 4.2는 LTS(Long Term Support)다. LTS는 긴 보증 기간을 뜻하는데 안정성을 위해 보통 LTS 버전을 많이 사용한다. requirements.txt를 생성한다. requirements.txt에는 설치한 라이브러리의 이름과 버전이 적혀있다. 다른 사람이 이 프로젝트를 이어서 진행하거나 수정하는 경우 어떤 라이브러리와 버전이 설치되어있는지 확인할 수 있고 이 문서를 통해 바로 설치도 가능하다. Django 프로젝트 생성하기 "name" 부분에는 따옴표없이 프로젝트의 이름을 넣어준다. 그럼 바로 지정한 이름의 폴더가 생성되고 그 안에 django의 구조가 자동으로 만들어진다. 앱 생성 및 등록 프로젝트 폴더 안에 "app name"으로 폴더가 생성된다. 이제 settings.py를 찾아 그 안에 생성한 앱 이름을 넣어주면 기본세팅이 끝난다. 프로젝트 폴더 안에 같은 이름의 폴더가 하나 더 있다. 그 안에 setting.py가 있다. settings.py 안에 둘러보다보면 INSTALLED APPS = [] 가 있다. 이미 여러 가지가 채워져있는데 그 밑에 생서한 앱 이름을 추가하면된다.
서경태
TIL 웹개발 - CS 모의 면접 정리
우선 CS 면접의 경험을 정리해보면, 왜 CS를 공부해야하는지 이제서야 알게 된 느낌이었다. 단순히 개념과 설명을 반복해서 표현하는게 아니라 각 개념들 간 관계를 알고 차이점까지 설명할 줄 알아야 실무에서도 적용할 수 있다. 주로 두 가지 개념에 대해 묻는다. 이렇게 두 가지를 물어보는 이유는 차이점이 존재하기 때문에 그 특징을 잘 설명하는 것이 중요하다. 배열, 연결리스트 자료구조에서 배열과 연결리스트는 모두 데이터를 저장하고 관리하는데 사용된다. 배열 연속적인 메모리 공간에 정하는 데이터 구조 고정 크기를 가지며 한번 선언되면 크기를 변경할 수 없다. → 이는 단점으로도 작용하는데 배열의 크기를 동적으로 변경할 수 없다. 인덱스를 사용해 데이터에 접근이 빠르다. → O(1)의 시간복잡도를 가진다. 삽입 및 삭제의 비효율성 → 배열 중간에 삽입하거나 삭제할 경우 나머지 요소들을 이동시켜야하므로 O(n)이 걸린다. 연결리스트 각 요소가 노드로 구성되고, 각 노드는 데이터와 다음 노드를 가리키는 포인터를 표함되는 데이터 구조 동적 크기로 필요에 따라 노드를 추가하거나 제거하여 크기를 동적으로 변경할 수 있다. → 각 노드는 효율적인 삽입/삭제 리스트의 중간에 요소를 삽입하거나 삭제하는데 O(1) 시간이 소요된다. → 반면 특정 위치를 찾는데 O(n)의 시간이 걸려 접근이 느리다. 비연속적 저장으로 메모리 활용이 유연하다. 프로세스와 스레드 프로세스 실행중인 프로그램의 인스턴스를 의미하며, 프로그램이 메모리에서 실행되는 상태를 말한다. 각 프로세스는 독립된 메모리 공간을 가지며, 다른 프로세스와 메모리 공간을 공유하지 않는다. 실행에 필요한 자원(파일, 메모리, CPU 등) 을 소유한다. 운영체제는 프로세스를 생성, 스케쥴링, 종료등의 작업을 관리한다.
서경태
TIL 웹개발 - CS면접 대비 정리글
모의 CS면접을 하루 앞두고 기억나는대로 정리를 해보려한다. 컴퓨터 구조 컴퓨터는 네 가지 장치로 이뤄진다. CPU 컴퓨터의 뇌에 해당하며 연산을 담당한다. 주기억장치 = RAM , 메모리 보조기억장치에 저장된 프로그램을 실행시키면 주기억장치에 올라와 사용한다. 전원이 꺼지면 주기억장치에 담긴 메모리도 없어진다. 보조기억장치 HDD, SSD 등 컴퓨터가 꺼져도 유지되는 장치. 평소 보조기억장치에 저장되었다가 프로그램이 실행되면 주기억장치에서 작동한다. 입출력장치 마우스, 키보드, 모니터 등 컴퓨터에 입력 혹은 출력을 할 수 있는 것들을 말한다. 프로세스: 작업이 이루어지는 것을 말한다. 프로세스의 순서 신규, 준비, 실행, 대기, 종료 로 이루어진다. 프로그램을 불러오면 신규에서 준비단계로 넘어온다. 메모리의 할당을 마치면 준비에서 실행 단계로 넘어가 실행된다. 실행 중 입력이 필요하면 대기단계로 넘어간다. 입력을 마치면 다시 준비 단계로 넘어가고 실행단계에서 출력한다. 종료를 하면 실행에서 종료 단계로 넘어간다. 프로세스 구조