본문 바로가기
  • 시 쓰는 개발자

알고리즘23

대충 만든 자판 def solution(keymap, targets): d = dict() result = [] for i in keymap: for target in i: if target in d: # 값이 이미 있을 때 d[target] = min(i.index(target) + 1, d[target]) else: # 값을 처음 넣는 경우 d[target] = i.index(target) + 1 for i in targets: sum = 0 for target in i: if target not in d: sum =.. 2024. 5. 19.
코테 문법정리 (4) - 딕셔너리{ } , 집합{ } 딕셔너리 key : value 쌍으로 구성되는 자료형이다. 순서가 없기 때문에 인덱싱 불가능. key에는 불변 데이터만 사용되지만, value에는 가변 데이터도 사용될 수 있다. 딕셔너리는 내부적으로 "해시 테이블"을 사용해서 검색 및 수정에 O(1)만 걸린다. 가변 객체이다. (가변 : 리스트, 셋, 딕셔너리 / 불변 : 문자열, 튜플, 수 자료형) 딕셔너리 메소드 keys() : key 데이터만 뽑아서 리스트로 이용할 때 사용 values() : value 데이터만 뽑아서 리스트로 이용할 때 사용 items() : key, value 한쌍을 리스트로 이용할 때 사용 https://100won-developer.tistory.com/entry/dictionary%EC%97%90%EC%84%9C-key-.. 2024. 3. 16.
코테 문법정리 (3) - 문자열 " " , 튜플 ( ) 문자열 파이썬의 문자열은 내부적으로 리스트처럼 처리된다. 따라서 인덱싱, 슬라이싱이 가능하다. 불변 객체이다. 불변 객체이다. (가변 : 리스트, 셋, 딕셔너리 / 불변 : 문자열, 튜플, 수 자료형) 문자열 초기화 큰/작은 따옴표를 이용하여 문자열을 초기화 한다. 다만 큰따옴표로 감싸면 내부의 작은 따옴표는 그대로 표기되고, 작은 따옴표로 감싸면 내부의 큰 따옴표가 그대로 표기된다. 따옴표 표시하기 백슬래시를 이용한다. \" 라고 표시하면 따옴표 자체를 프린트할 수 있다. str1 = "hello" str2 = "hi kwang's mom~" # hi kwang's mom~ str3 = "\"hello\"" # "hello" 문자열 연산 str1 + str2 : 두 문자열을 더하기 기호를 이용해 더한다.. 2024. 3. 16.
코테 문법정리 (2) - 리스트 [ ] ★★★ 자료형은 잘 알아두어야 한다. 자료형에 따라 쓰는 함수도 다르고 처리 방식도 달라지니 조심하자. 리스트 ★★★내부적으로 배열이다.가변 객체이다. (가변 : 리스트, 셋, 딕셔너리 / 불변 : 문자열, 튜플, 수 자료형)연결리스트라서 append(), remove() 등 사용 가능배열 혹은 테이블이라고 부르기도 함.리스트 초기화 방법a = [1,2,3,4,5] # 직접 값을 넣어서 초기화할 수 있다.a = list() # 빈 리스트 만들기 (1)a = [] # 빈 리스트 만들기 (2) TIP - 모든 값 0으로 초기화 하기n = 5a = [0]*n # [0,0,0,0,0]이런식으로 크기가 N이고, 모든 값이 0인 1차원 리스트를 초기화 할 수 있다. 리스트 인덱싱인덱스에 -1을 넣으면 맨 뒤에 값을 가져올.. 2024. 3. 15.
코테 문법정리 (1) - 실수형, 연산자 정수형 대부분의 입출력 형태이다. pass 실수형 제일 조심해야하는 게 바로 실수형이다. 일단 표현 방식부터 알아보자. 1.23 1e9 # 10억 67.22e1 # 672.2 65e-1 # 6.5 우리가 아는 방식 외에도 e나 E를 이용해서 위와같이 표현할 수 있다. 큰 수는 저렇게 문제가 나오기도 하니 알아두자. 부동 소수점 실수를 처리할 때 부동소수점 방식을 이용하기에 0.3 + 0.6은 0.89999999.... 로 저장된다. 보통 정수나 문자열 등으로 입출력을 받기에 이런 것 까지 고려하는 문제는 잘 나오지 않겠지만 알아는 두자. round 함수 - round(실수, 반올림하고자 하는 위치-1) 위 상황처럼 소수점으로 곤란할 때 round함수를 쓸 수 있다. 윗줄에서 말한 반올림하고자 하는 위치-.. 2024. 3. 14.
문제풀이 & 오답노트 양식 step 1. 논리적인 흐름 직접 써내려가며 문제 파악하기 step 2. 적합한 자료구조 생각하기 step 3. 시간복잡도, 공간복잡도 계산해보기 step 4. 문제 풀기 (20~30분 투자) step 5. 문제 정리 / 오답노트하기 문제 분석 알고리즘 설계 내 코드 틀린 이유 코드 수정 느낀점 추가하면 좋은 것)) 시간복잡도 2024. 3. 4.
DFS / BFS 차이 두가지 모두 그래프를 탐색하는 방법이다. DFS 가장 깊은 곳까지 탐색을 마치고 돌아와서 탐색하는 방법. 예를들면 미로찾기를 할 때 한 방향으로 쭉 가고, 막다른 길이 나오면 다시 가장 가까운 갈림길로 돌아와서 다시 그 방향으로 쭉 가는 방법. 특징) DFS는 모든 노드를 방문해야할 때 사용하면 좋다.★★★ (다만, 모든 정점을 방문할 땐 DFS나 BFS나 편한걸 사용하면 되지만 DFS의 코드가 더 짧아서 보통 DFS를 추천하고, 속도는 BFS가 더 빨라서 제한시간이 빡세게 잡혀있다면 BFS를 사용하는게 좋은 경우도 있다.) DFS는 Stack 또는 재귀함수를 사용하는데 보통은 스택을 사용하길 권장한다.★ 경로마다 특징이 있는 경우 DFS를 사용해야한다. 탐색할 그래프가 엄청 크다면 DFS를 사용한다. .. 2023. 2. 4.
구) 브론즈~실버 백준 다시 볼법한 문제 예전에 실버 5 안팎의 문제들 중에 틀렸던 문제들인데, 근데 이제는 안볼듯... 그래도 정리는 해본다. 1929 - 소수 빠르게 구하기 힌트 : 소수라는 건 결국 약수를 다루는 거고, 약수들은 대칭이다. 2941 - 크로아티아 알파벳 힌트 : 변경된 알파벳들로만 이루어진 리스트를 만든다. 1157 - 단어 공부 힌트 : set을 이용. 1152 - 단어의 개수 힌트 : 공백으로 나누고, 덩어리 개수 참고 : 왜 ord == 32나 == ' ' 로는 안되는가?? -> 공백하나만 입력값으로 줄 수도 있으니 2839 - 설탕 배달 힌트 : 5의 배수가 될때까지 설탕 3kg씩 빼기 // 또는 5kg을 0봉지 1봉지 2봉지 ... list로 경우의 수 다 만들어놓기 2108 - 통계학 中 최빈값 모르겠다 ... .. 2023. 2. 2.
12/27 스터디 1300 K번째 수 n=10 , k=20이면 숫자가 크다보니 규칙을 찾아야함 A 행렬 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 ... 10 20 30 40 50 60 70 80 90 100 B[20] 이중에서 20보다 작거나 같은 값이 몇개인지 세면 됨 => 각 행이 구구단임 ? k=20 i*j가 20 안에 몇개인지 세면 되는데 1행은 10개 10까지 2행은 10개 20까지 3행은 6개 18까지 4행은 5개 20까지 5행은 4개 20까지 6행은 3개 18까지 7행은 2개 14까지 8행은 2개 16까지 9행은 2개 18까지 10행은 2개 20까지 k // i => 2.. 2022. 12. 28.