문제

 

참고한 코드
n,m = list(map(int,input().split()))
s = []
def dfs(start):
    if len(s)==m:
        print(' '.join(map(str,s)))
        return
    
    for i in range(start,n+1):
        if i not in s:
            s.append(i)
            dfs(i+1)
            s.pop()
dfs(1)

> 참고한 블로그

https://jiwon-coding.tistory.com/22

 

[백준] 15650번 N과 M(2) / 파이썬(python)

# 문제 링크 www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야

jiwon-coding.tistory.com

 

 

내가 해석한 코드 설명
n,m = list(map(int,input().split()))
s = []

> 여기느 N과 M (1) 과 동일하다.

 

def dfs(start):
    if len(s)==m:
        print(' '.join(map(str,s)))
        return
    
    for i in range(start,n+1):
        if i not in s:
            s.append(i)
            dfs(i+1)
            s.pop()

> N과 M(1)과 달라진 점은 start 초기값이 생겼다는 것이다.

> 그 이유는 중복되는 값이 없어야될 뿐만 아니라, 오름차순으로 출력해야 되기 때문이다.

> 그러므로 start 변수가 for문에 range(start, n +1)로 들어감으로써 중복되는 것을 없애줄뿐만 아니라, 자신보다 작은 값은 포함을 시키지않게 된다!!

> 너무 어렵다 ㅜㅜ

문제

 

참고한 코드
n, m = map(int, input().split())

s= []

def dfs():
    if len(s) == m:
        print(' '.join(map(str, s)))
        return
    for i in range(1, n+1):
        if i not in s:
            s.append(i)
            dfs()
            s.pop()
            
dfs()

> 참고한 블로그

https://jamesu.dev/posts/2020/04/13/baekjoon-problem-solving-15649/

 

백준 문제 풀이: 15649 - N과 M (1)

Dev Blog by James Minsu Jeon

jamesu.dev

> join 함수에 관한 블로그

https://blockdmask.tistory.com/468

 

[python] 파이썬 join 함수 정리 및 예제 (문자열 합치기)

안녕하세요. BlockDMask입니다. 오늘은 파이썬에서 리스트를 문자열로 일정하게 합쳐주는 join 함수에 대해서 알아보려고 합니다. join 함수는 문자열을 다룰 때 유용하게 사용할 수 있는 함수이니

blockdmask.tistory.com

> 이번에 join 함수와 백트래킹에 대한 의미를 알아보았다!!!

 

내가 해석한 코드 설명
n, m = map(int, input().split())
s= []

> n, m 은 자연수 N, M을 받을 변수입니다.

> s 변수는 값을 출력하기 위한 빈 리스트입니다.

 

def dfs():
    if len(s) == m:
        print(' '.join(map(str, s)))
        return
    for i in range(1, n+1):
        if i not in s:
            s.append(i)
            dfs()
            s.pop()

> 먼저 if문을 사용하여 s 변수의 길이가 m 변수와 같다면 ' '.join(map(str, s)) 을 추출하도록 되어있다.

> 이 의미는 s 변수는 m개의 값만큼의 길이일 때마다 값을 추출해야하기 때문이다.

> 그리고 s 변수는 리스트로서 join 함수를 사용하면 join 앞에 있는 문자열이 각 리스트의 값 사이에 들어가게 된다.

> 예제 출력을 보면 각 값은 빈 칸을 두고 출력되기 때문에 ' '.join 함수를 사용한 것이다.

> 그리고 for 문(반복문)을 range(1, n +1) 범위만큼 사용하고 dfs 를 사용하여 s 변수에 같은 값이 존재하지 않으면 s 변수에 값을 추가하고, 그와 동시에 재귀함수를 사용하여 dfs() 를 다시 적용시킨다.

> 처음에 이해가 잘가지 않았는데, 이렇게 하면 s 변수에 들어간 값을 통해 얻을 수 있는 값들은 전부 얻고 나오게 된다.

> 그리고 다시 그 값을 pop() 함수를 통해 빼주면서 반복된 값을 없게 해준다.

 

문제

 

내가 작성한 코드
# 정수 K 입력
k = int(input())
v_l = []

for i in range(k):
    v = int(input())
    if v == 0:
        v_l.pop()
        continue
    else:
        v_l.append(v)
try:
    print(sum(v_l))
except:
    print(0)

 

코드 설명
k = int(input())
v_l = []

> k는 K개의 줄을 입력받아야 하는 값을 입력받았다.

> v_l 변수는 결과 출력하기 위한 빈 리스트입니다.

 

for i in range(k):
    v = int(input())
    if v == 0:
        v_l.pop()
        continue
    else:
        v_l.append(v)

> for문(반복문)을 k 길이만큼 사용하여, 값을 v 변수에 담게 했습니다.

> if - else 문을 사용하여 v 값이 0이라면 v_l 변수에 값을 빼주기 위해 v_l.pop() 함수를 사용해주었습니다.

> 그리고, 바로 다음 반복문으로 넘어가기 위해 continue 를 작성했습니다.

> v 값이 0이 아니라면, v_l 변수에 v 값을 append 시켜주었습니다.

 

try:
    print(sum(v_l))
except:
    print(0)

> try - except 문을 사용하여 오류발생할 시를 대비했습니다.

> try 문에는 최종 출력값인 v_l 변수의 합을 출력하기 위해서 sum(v_l) 함수를 적용하였습니다.

> except문에는 print(0)을 해주었는데, 그 이유는 리스트가 빌 때는 sum() 함수를 적용하면 에러가 발생하지 않을까 싶어 print(0) 을 해주었습니다.

문제

 

참고한 코드
def solution(genres, plays):
    
    album = {}
    sum_l = {}
    
    for i in range(len(genres)):
        if genres[i] not in album:
            album[genres[i]] = [(plays[i], i)]
            sum_l[genres[i]] = plays[i]
        else:
            album[genres[i]].append( (plays[i], i))
            sum_l[genres[i]] += plays[i]
            
    sort_sum = sorted(sum_l.items(), key= lambda x : x[1], reverse=True)
    # print('sort_sum = ', sort_sum)
    
    for key in album.keys():
        album[key].sort(key = lambda x : x[0], reverse=True)
    # print('album = ', album)
    
    result_dic = {}
    for i in sort_sum:
        for key in album.keys():
            if i[0] == key:
                result_dic[key] = album[key]
    # print('result_dic = ', result_dic)
    result = []
    for value in result_dic.values():
        if len(value) > 1:
            for i in range(2):
                result.append(value[i][1])
        else:
            result.append(value[0][1])
    
    return result

> 참고한 블로그

https://velog.io/@tanger2ne/python-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%B2%A0%EC%8A%A4%ED%8A%B8%EC%95%A8%EB%B2%94

 

[프로그래머스] 베스트앨범-python

프로그래머스 - 베스트앨범 문제풀이

velog.io

 

내가 해석한 코드 설명
album = {}
sum_l = {}

> album 변수는 genre와 genre에 맞는 각각의 plays를 담기위한 dict 자료형이다.

> sum_l 변수는 unique한 genre의 plays 합을 담기위한 dict 자료형이다.

 

for i in range(len(genres)):
    if genres[i] not in album:
        album[genres[i]] = [(plays[i], i)]
        sum_l[genres[i]] = plays[i]
    else:
        album[genres[i]].append( (plays[i], i))
        sum_l[genres[i]] += plays[i]

> for문(반복문)을 사용하여 genres 에 길이만큼 반복을 진행해준다. 솔직히 저기서 len(genres)가 아니라 len(plays)를 해줘도 무방하다.

> 여기서 if-else문을 사용하여 album 자료형에 genres의 값들이 존재한다면 매번 값이 바뀌기 때문에 존재하지 않을때는 album[genres[i]] = [(plays[i], i)]를 해주지만, 그러지 않을때는 append 함수를 사용해야 한다.

> album 자료형에는 (plays[i], i)로 해주는 이유는 결과값이 고유번호로 출력을 해주어야 하기 때문에 고유번호에 맞는 plays 수를 같이 묶어서 넣어준 것이다.

> sum_l 자료형은 unique한 genres의 합을 구해야 하기 때문에 처음일때는 sum_l[genres[i]] = plays[i]로 하지만 나중에는 sum_l[genres[i]] += plays[i] 로 값을 더해준다.

 

sort_sum = sorted(sum_l.items(), key= lambda x : x[1], reverse=True)

> sort_sum 변수는 unique한 genres의 plays 합인 sum_l 변수를 plays 가 많은 순서대로 내림차순 정렬을 하기 위한 변수입니다.

> 여기서 알게된 것은 .items() 함수입니다. 이것을 이용하면 dict 형이 예를 들면 {'밥' : '한식'} 인 dict형이 items() 함수를 사용하면 ('밥', '한식) 으로 묶어질 수 있다는 것이였다!!

> 그러므로 sum_l.items() 함수를 사용하면 기존 {'genres' : 'plays'의 합} -> ('genres', 'plays'의 합) 으로 바뀌게 되고, sorted() 함수에 있는 key 값을 lambda x : x[1]로 해주면 x[1]인 plays의 합 기준으로 내림차순이 정렬되므로 원하는 plays가 많은 genres 순대로 sort_sum 변수 값을 만들수 있게 된다.

 

for key in album.keys():
    album[key].sort(key = lambda x : x[0], reverse=True)

> 이 코드는 genre 별 고유번호와 plays 값으로 이루어진 album 변수를 genre별 고유번호의 plays가 높은 순으로 정렬하기 위한 코드입니다.

> album.keys() 를 사용하면 album의 키인 genre 가 추출되게 되고, for문을 사용하면 album의 key 가 차례대로 추출되게 된다.

> album[key]는 곧 plays 수와 고유번호의 묶음들로 이루어져있고, sort() 함수를 사용하여 key = lambda x : x]0]으로 진행하면 x[0]인 plays의 수가 많은 고유번호 순으로 내림차순을 진행한다. 

> 반복문이기 때문에 각 장르별 plays의 내림차순이 진행이 된다.

 

result_dic = {}
for i in sort_sum:
    for key in album.keys():
        if i[0] == key:
            result_dic[key] = album[key]

> result_dic 자료형은 genres의 plays 합계가 많은 순대로 값을 넣기 위한 변수입니다.

> 이중 for문을 사용하여 genres의 plays 합계가 높은 순으로 정렬된 sort_sum을 가장 먼저 for문을 사용하고, 그 다음 album.keys()를 반복문에 사용하여 sort_sum의 plays 가 높은 genre가 album의 key와 같다면 result_dic[key] = album[key]로 작성을 하여 값을 넣어준다.

 

result = []
for value in result_dic.values():
    if len(value) > 1:
        for i in range(2):
            result.append(value[i][1])
    else:
        result.append(value[0][1])

> result 변수는 원하는 값 순서대로 결과를 추출하기 위한 변수입니다.

> for문을 사용하여 result_dic.values() 를 순서대로 추출해준다. result_dic.values()는 plays 합계가 높은 순인 genres의 고유번호 plays 가 저장되어 있는 변수의 고유번호와 plays가 저장된 값이다.

> if-else문을 사용하여 value 값이 1보다 크다면 최대 두개까지 추출할 수 있으므로 그 안에 for문을 한 번 더 사용하고, result.append(value[i][1]) 을 사용하여 각 value의 고유번호를 result의 추가해준다.

> len(value)가 1보다 같거나 작다면 그대로 result.append(value[0][1])로 작성을 해준다.

 

아쉬운 점

> 솔직히 쉽게 풀줄 알았는데... ㅜㅜ 상당히 복잡하다...

문제

 

내가 작성한 코드
# 방 번호 N 입력
n = input()
n_l = [int(i) for i in n]
v = [0] * 10

for n in n_l:
    if (n ==9 and v[n] > v[6]):
        v[6] += 1
        continue
    if (n ==6 and v[n] > v[9]):
        v[9] += 1
        continue
    v[n] += 1


print(max(v))

 

코드 설명
n = input()
n_l = [int(i) for i in n]
v = [0] * 10

> 숫자 n을 입력받는데, input() 함수로 입력받으면 문자로 입력된다. 그리고, n_l 변수는 list compression 을 사용하여 숫자를 하나씩 분리하여 담은 리스트입니다. 이렇게 한 이유는 각 숫자의 개수를 세기 위해서입니다.

> 어쩌면 이 방식은 계수 정렬에서 아이디어를 얻었습니다.

> v는 n_l 변수에 담은 숫자 n의 각 숫자 0~9의 개수를 각각 세기 위한 변수입니다.

 

for n in n_l:
    if (n ==9 and v[n] > v[6]):
        v[6] += 1
        continue
    if (n ==6 and v[n] > v[9]):
        v[9] += 1
        continue
    v[n] += 1

> for문(반복문)을 사용하여 n_l 변수에 담겨져있는 숫자를 하나씩 추출하면서 v[n] 변수에 담아줍니다.

> 이 과정에서 6과 9는 같이 사용할 수 있기 때문에, if문을 두 번사용하여 n==9 and v[n] > v[6] 과 같은 코드를 사용하여 n이 9인데 9의 개수 v[n]과 6의 개수 v[6] 을 비교할 때 v[9]가 더 크다면 v[6]의 값을 넣어주기 위해 if 문을 사용하였습니다.

> 그리고 continue 문을 사용하여 아래의 v[n] += 1을 적용하지 않고 바로 다음 for문으로 넘어가기 위해서 적용하였습니다. 

> continue문을 사용하지 않으면 정답이 추출되지 않습니다.

 

print(max(v))

> 마지막으로 max(v)를 해주면 우리가 원하는 필요한 세트의 개수를 구할 수 있습니다

문제

 

내가 작성한 코드 (틀림)
import sys
input = sys.stdin.readline
from collections import deque

# N, K 입력
n, k = map(int, input().split())
queue = deque([i for i in range(1, n +1)])
cnt = 0
result = []

while queue:
    cnt += 1
    if cnt == k:
        result.append(queue.popleft())
    else:
        queue.append(queue.popleft())

> 흠... 이건 맞췄어야 됐는디... ㅜㅜ

> 화이팅!!

 

참고한 코드
from collections import deque

queue = deque()
answer = []

n, k = map(int, input().split())

for i in range(1, n+1):
    queue.append(i)

while queue:
    for i in range(k-1):
        queue.append(queue.popleft())
    answer.append(queue.popleft())

print("<",end='')
for i in range(len(answer)-1):
    print("%d, "%answer[i], end='')
print(answer[-1], end='')
print(">")

> 참고한 블로그

https://hongcoding.tistory.com/41

 

[백준] 11866번 요세푸스 문제 0 (Python 파이썬)

www.acmicpc.net/problem/11866 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 문제 설명 1번부터 N번까지 N명의 사람이 원을 이..

hongcoding.tistory.com

내가 해석한 코드 설명
from collections import deque

queue = deque()
answer = []

> 큐 함수를 사용하기 때문에 deque 모듈을 불러오고 queue 변수에 deque 함수를 사용하였고, answer는 최종 결과를 추출하기 위한 변수입니다.

 

n, k = map(int, input().split())

for i in range(1, n+1):
    queue.append(i)

> n, k는 입력될 변수를 받기 위한 map(int, input().split()) 로 코드를 작성하였습니다.

> 반복문을 사용하여 n개의 길이만큼 queue 변수의 값을 받는 것입니다.

> 저는 틀렸었지만 위와 같은 방식이 아니라, list compression 방법을 적용하였습니다.

 

while queue:
    for i in range(k-1):
        queue.append(queue.popleft())
    answer.append(queue.popleft())

> while문을 사용하여 queue의 값이 존재할 때까지 반복문을 진행하는 것입니다. 이렇게 하는 이유는 k번째 데이터를 추출해야하기 때문입니다.

> 여기서는 for문을 사용하여 k번째전까지 데이터를 popleft() 함수를 사용하여 내보내는 동시에 append 함수를 사용하여 다시 queue 변수에 넣는 작업을 하였습니다.

> 다시 for문을 빠져나와 answer 변수에 k번째 값을 popleft() 함수로 queue 변수에 빼준 후 append 함수로 answer 변수에 원하는 값을 넣는 작업을 하는 것입니다.

> 저는 cnt 변수를 사용하여 k번째 값이 되는 것을 확인하기 위한 변수를 만들었었는데, 이 방법이 더 좋은 거 같습니다!! 

 

print("<",end='')
for i in range(len(answer)-1):
    print("%d, "%answer[i], end='')
print(answer[-1], end='')
print(">")

> 솔직히 이 작업을 어떻게 해야할지 모르겠어서.. .포기했었는데 ㅜㅜ

> print("<", end='') 작업을 통해 print로 다음 칸으로 넘어가는 것이 아닌 계속 그 줄에 있기 위해 end = '' 로 적용해주었습니다.

> 그리고 반복문을 사용하여 k번째 값들의 모음인 answer 변수를 print("d, "%anser[i], end=' ) 로 코드를 작성하였습니다.

매우 좋은 반복인 거 같다!! %를 활용하여 쉽게 print 할 수 있는 것!!

 

문제

 

내가 작성한 코드 (틀림)
import sys
input = sys.stdin.readline

def dfs(x, y, visited, graph):
    cnt = 0
    if x < 0 or y < 0 and x >= m and y >= n:
        break
    if visited[x][y] == False and graph[x][y] == 1:        
        visited[x][y] = True
        for i in range(1, 5):
            dfs(x + dx[i], y + dy[i], visited)
        cnt += 1
        return cnt
    else:
        for i in range(1, 5):
            dfs(x + dx[i], y + dy[i], visited)
                
# Test CAse 수
t = int(input())

# 상, 하, 좌, 우
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

for i in range(t):    
    # 가로길이(M), 세로길이(N), 위치의 개수(K)
    m, n, k = map(int, input().split())

    # 배추밭
    graph = [ [0] * m for _ in range(n) ]
    visited = [ [0] * m for _ in range(n) ]
    for i in range(k):
        m_v, n_v = map(int, input().split())
        graph[m_v][n_v] = 1
    print(dfs(0, 0, visited, graph))

> 저는 dfs 로 풀려고 했는데... bfs 공식 코드는 외우고 있는데 이거를 문제에 적용시키는 것은 또 다른 문제임을 깨달았습니다. ㅜㅜ

> 더 공부하자!!!

 

참고한 코드
from collections import deque

dx = [0,0,1,-1]
dy = [1,-1,0,0]

t = int(input())

def bfs(graph, a, b):
    queue = deque()
    queue.append((a,b))
    graph[a][b] = 0

    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x+dx[i]
            ny = y+dy[i]
            if nx < 0 or nx >=n or ny < 0 or ny >= m:
                continue
            if graph[nx][ny] == 1:
                graph[nx][ny] = 0
                queue.append((nx, ny))
    return

for i in range(t):
    cnt = 0
    n, m, k = map(int,input().split())
    graph = [[0]*m for _ in range(n)]

    for j in range(k):
        x, y = map(int, input().split())
        graph[x][y] = 1

    for a in range(n):
        for b in range(m):
            if graph[a][b] == 1:
                bfs(graph, a, b)
                cnt += 1
    print(cnt)

> 참고한 블로그

https://hongcoding.tistory.com/72

 

[백준] 1012 유기농 배추 (Python 파이썬)

www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것

hongcoding.tistory.com

 

내가 해보는 코드 작성
from collections import deque

dx = [0,0,1,-1]
dy = [1,-1,0,0]

> 위 모듈 불러오는 것은 아래 코드 작성에 있어서 bfs는 큐 함수를 필요하기 때문에 deque 모듈을 불러옵니다.

> dx, dy는 상, 하, 좌, 우 방향 이동할 때 필요로 하는 코드입니다.

 

t = int(input())

def bfs(graph, a, b):
    queue = deque()
    queue.append((a,b))
    graph[a][b] = 0

    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x+dx[i]
            ny = y+dy[i]
            if nx < 0 or nx >=n or ny < 0 or ny >= m:
                continue
            if graph[nx][ny] == 1:
                graph[nx][ny] = 0
                queue.append((nx, ny))
    return

> t 변수는 테스트 케이스 값을 입력받기 위한 코드입니다.

> 본격적인 bfs 코드 함수 코드입니다.

> graph는 배추밭에 배추 위치가 입력되어 있는 변수입니다. 그리고 a, b는 배추 위치 값 코드를 의미합니다.

> deque() 함수를 통해 그 위치 값을 queue 변수에 받고, graph[a][b]는 배추 위치가 있는 값으로 1인데 그 값을 0으로 바꿔줍니다. 이는 마지막 개수를 세기 위해서 주변에 존재하는 배추 위치를 제거하기 위한 코드입니다.

> while 문(반복문)을 사용하여 상,하,좌, 우로 값을 적용하여 배추 위치가 있는 곳은 0으로 바꾸고 아닌 곳은 continue로 뛰어넘게 작성한 것입니다.

 

for i in range(t):
    cnt = 0
    n, m, k = map(int,input().split())
    graph = [[0]*m for _ in range(n)]

    for j in range(k):
        x, y = map(int, input().split())
        graph[x][y] = 1

    for a in range(n):
        for b in range(m):
            if graph[a][b] == 1:
                bfs(graph, a, b)
                cnt += 1
    print(cnt)

> 반복문을 사용하여 test case 개수만큼 n,m,k, graph 값을 받습니다.

> 그리고 다시 한 번 이중반복문을 적용하여 주어진 행과 열만큼 일일이 graph[a][b] == 1인 개수를 세어 최종 출력하기 위한 cnt 값을 출력합니다.

> 여기서 cnt 값은 위에서 설명한 bfs 함수를 통해서 한 배추 위치 근처에 있는 배추들은 오로지 하나의 배추 위치 값만 남게 하기 때문에 정확한 값을 추출할 수 있게됩니다.

> bfs, dfs 코드를 외우는 것도 중요하지만, 문제에 맞게 적용하는게 더 중요하다!! 더 공부!!!

문제

 

참고한 코드
import sys
input = sys.stdin.readline

x, y = map(int, input().split())
z = (y * 100) // x

if z >= 99:
    print(-1)
else:
    answer = 0
    left = 1
    right = x
    
    while left <= right:
        mid = (left + right) // 2
        if (y+mid)*100 // (x+mid) <= z:
            left = mid + 1
        else:
            answer = mid
            right = mid - 1
            
    print(answer)

> 참고한 블로그

https://hillier.tistory.com/70

 

[백준 1072] 게임 (python)

1072번: 게임 김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코

hillier.tistory.com

> 보기에 풀 수 있을거 같은데... 정말 안풀렸고, 결국 못풀었다 ㅜㅜ

 

 

내가 해보는 코드 설명
import sys
input = sys.stdin.readline

> '이것이 코딩테스트' 책에서도 이 코드를 추천했었는데, 나도 이제부터 써먹어야겠다!!

> 외우자!!

 

x, y = map(int, input().split())
z = (y * 100) // x

> 처음에 코드를 int(input().split()) 으로 작성해서 계속 error가 발생했다... map(int, input().split()) 그냥 외우자!!

> 그리고, z = int( (y / x) * 100) 으로 코드를 작성하면 결과가 틀렸다고 나온다!! 그 이유는 python에서는 부동소수점 오차가 나서 정확하지 않다고 한다고 한다. 위의 내가 참고한 블로그에서 그렇게 설명을 해주셨다.

 

if z >= 99:
    print(-1)
else:
    answer = 0
    left = 1
    right = x
    
    while left <= right:
        mid = (left + right) // 2
        if (y+mid)*100 // (x+mid) <= z:
            left = mid + 1
        else:
            answer = mid
            right = mid - 1
            
    print(answer)

> 처음 z >= 99 이 부분을 z == 100 으로 해야되는거 아니야?? 라고 생각을 했었다. 하지만, 처음부터 100이 아니라면, 절대 100으로 진급할 수 없다는 것을 깨닫게 되었다. 어차피 100은 무리!!

> 이분탐색을 공부해서 적용하려고 했는데, 이것은 퀵 정렬과도 유사한거 같다. 허튼, 잘 참고해서 다음 이분 탐색 문제에서는 잘 써먹어보자!!

+ Recent posts