Algorithm 9

[Python] defaultdict 딕셔너리 기본값 설정하는 방법

딕셔너리에 대한 문제 해결을 하면서 keyError를 처리하기 위해, key 값과 value 값을 넣어서 초기화를 해준 기억이 있다. 대표적으로 문자열에서의 쓰인 알파벳 개수를 판단하기 위해 사용하면 편리하다. "hello world" 라는 문장에서 각 알파벳의 개수를 딕셔너리 형태로 나타내고 싶을 때, 나는 보통 아래처럼 표현 하였다. str = "hello world" d = dict() for i in str: if i not in d: d[i] = 0 d[i] += 1 print(d) # {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1} if i not in d: d[i] = 0 for문 안에 이 코드가 존재하는 이유는 딕셔너리에 ..

Algorithm 2023.06.21

[Python] 문자열 치환하는 방법 replace

replace str.replace(old, new[, count]) 모든 부분 문자열 old 가 new 로 치환된 문자열의 복사본을 돌려줍니다. 선택적 인자 count 가 주어지면, 앞의 count 개만 치환됩니다. old : 바꾸고 싶은 문자열 new : 새로 바꾸고 싶은 문자열 count : 앞에서 부터 count 개수 만큼 문자 바꾸기 예시 ) a = "hello world" b = "abcd****efgh" print(a.replace("hello", "hi")) print(b.replace("*", "0")) # 전부 변경 print(b.replace("*", "0", 2)) # 부분 변경 (앞에서 부터) """ *output* hi world abcd0000efgh abcd00**efgh """

Algorithm 2023.04.06

[Python] 문자열에 다른 문자열 채우는 방법 rjust, ljust, zfill

rjust str.rjust(width[,fillchar]) 오른쪽으로 정렬된 문자열을 길이 width 인 문자열로 돌려줍니다. 지정된 fillchar (default: 스페이스)을 사용하여 채웁니다. ( fillchar 는 선택 ) width 가 len(str) 보다 작거나 같은 경우 원래 문자열이 반환됩니다. 예시) n = 5 # n은 반환되는 문자열의 총 길이 print("12".rjust(n)) print("12".rjust(n, "0")) # fillchar 는 선택 print("12345".rjust(n, "0")) print("12".rjust(n, "A")) """ output 12 00012 12345 AAA12 """ ljust str.ljust(width[,fillchar]) 왼쪽으로..

Algorithm 2023.04.04

그리디 알고리즘 ( Greedy Algorithm ) 실전 문제 2 - Python

1이 될때 까지 어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 한다. 단, 두 번째 연산은 N이 K로 나누어떨어질 때만 선택할 수 있다. 1. N에서 1을 뺀다. 2. N에서 K로 나눈다. 예를 들어 N이 17, K가 4라고 가정하자. 이때 1번의 과정을 한 번 수행하면 N은 16이 된다. 이후에 2번의 과정을 두 번 수행하면 N은 1이 된다. 결과적으로 이 결우 전체 과정을 실행한 횟수는 3이 된다. 이는 N을 1로 만드는 최소 횟수이다. N과 K가 주어질 때 N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는 최소 횟수를 구하는 프로그램을 작성하시오. 입력조건 1. 첫째 줄에 N(2

Algorithm 2022.03.10

구현 (implementation) 실전 문제 - Python

예제 4 - 1 상하좌우 여행가 A는 NxN 크기의 정사각형 공간 위에 서 있다. 이 공간은 1x1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위 좌표는 (1, 1)이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당한다. 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)이다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여있다. 계획서에는 하나의 줄에 띄어쓰기를 기준으로하여 L, R, U, D 중 하나의 문자가 반복적으로 적혀 있다. 각 문자의 의미는 다음과 같다. L : 왼쪽으로 한 칸 이동 R : 오른쪽으로 한 칸 이동 U : 위로 한 칸 이동 D : 아래로 한 칸 이동 * 이때 여행가 A가 NxN 크기의 정사각형 공간을 벗어나는 움직임은 무시된..

Algorithm 2022.03.04

구현 (implementation)

- 아이디어를 코드로 바꾸는 구현 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정을 구현이라고 한다. 흔히 문제 해결 분야에서 구현 유형의 문제는 '풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제'를 의미한다. 실제로 코딩 테스트에서 구현 문제를 보면 당황할 수 있다. 어떻게 풀면 될지 대략 감은 오는데, 막상 소스코드로 옮기려니 무엇부터 작성해야 할지 모를 수 있기 때문이다. 예를 들어 파이썬으로 코딩 테스트에 응시했는데, N 개의 원소가 들어 있는 리스트에서 R 개의 원소를 뽑아 한 줄로 세우는 모든 경우를 구해야 하는 문제를 만나면 어떻게 할까? 무작정 기능을 전부 작성할 수도 있다. 하지만 파이썬은 itertools 와 같은 표준 라이브러리로 쉽게 짜는 방법도 있다. 이는 언어의 문법을..

Algorithm 2022.03.03

그리디 알고리즘 ( Greedy Algorithm ) 실전 문제 1 - Python

동빈이의 큰수의 법칙 동빈이의 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M 번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K 번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 예를 들어 순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때 M이 8이고, K가 3이라고 가정하자. 이 경우 특정한 인덱스의 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5인 46이 된다. 배열의 크기 N, 숫자가 더해지는 횟수 M, 그리고 K가 주어질 때 동빈이의 큰 수의 법칙에 따른 결과를 출력하시오. 입력조건 첫째줄에 N (2

Algorithm 2022.03.02

그리디 알고리즘 ( Greedy Algorithm )

그리디 알고리즘( Greedy Algorithm ) 그리디 알고리즘은 단순하지만 강력한 문제 해결 방법이다. 단어 그대로 번역 하면 탐욕법 이고 단순 무식하게, 탐욕적으로 문제를 푸는 알고리즘 이다. 여기서 탐욕적 이라는 말은 현재 상황에서 지금 당장 좋은 것만 고르는 방법이다. 매 순간 가장 좋아 보이는 것을 선택하며 , 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 코딩 테스트 유형 그리디의 문제 유형은 사전에 외우고 있지 않아도 풀 수 있을 가능성이 높다. 최단 경로를 구하는 다익스트라 알고리즘은 그리디 알고리즘으로 분류 되므로 암기가 필요한 알고리즘 이다. 그리디 알고리즘 자체가 문제 출제의 폭이 매우 넓기 때문에 다익스트라 알고리즘과 같은 특이 케이스를 제외하고는 단순 암기를 통해..

Algorithm 2022.03.01

[자료구조] 이진 탐색 (Binary Search) 파이썬 재귀 반복문

- 이진탐색 이진 탐색은 데이터가 정렬되어 있는 배열에서 찾고자 하는 수를 찾아내는 방법이다. 데이터가 정렬되어 있는 배열을 data 라고 정하고 찾고자 하는 수를 target 이라고 하자. 배열의 중간 인덱스를 mid 로 정한다. 찾고자 하는 수 ( target ) 가 배열의 중간값 ( data[mid] ) 보다 크다면 우측 데이터 대상으로, 찾고자 하는 수 ( target ) 가 배열의 중간값 ( data[mid] ) 보다 작다면 좌측 데이터 대상으로 탐색을 한다. 찾고자 하는 수가 어디에 있냐에 따라 start 와 end의 위치를 변경해준다. 이러한 방법을 반복하여 찾고자 하는 수를 찾을 때까지 반복해 준다. 정리하면 이렇게 된다. ▷ target : 찾고자 하는 값 ▷ data : 오름차순으로 정..

Algorithm 2022.01.13