백준 10814 : 문제링크

  • 문제유형 : 정렬

  • 설명

    1. 튜플로 두 개의 데이터를 묶어서 저장

    2. sorted 함수로 정렬, lambda로 첫번째 정렬 기준값을 정함

    3. 튜플로 저장하면 첫번째 정렬 기준값이 동일할 때 다음 값으로 자동 정렬

  • 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    n = int(input())

    array = []

    for _ in range(n):
    input_data = input().split(' ')
    array.append((int(input_data[0])), input_data[1])

    array = sorted(array, key=lambda x : x[0])

    for i in array:
    print(i[0], i[1])

Comment and share

백준 1427 : 문제링크

  • 문제유형 : 정렬

  • 설명

    1. 9 에서 0 까지 차례대로 내려가면서 확인

    2. 각 숫자의 개수를 계산해서 출력

  • 풀이

    • 선택 정렬
      1
      2
      3
      4
      5
      6
      array = input()

      for i in range(9, -1, -1):
      for j in array:
      if int(j) == i:
      print(i, end='')

Comment and share

백준 2750 : 문제링크

  • 문제유형 : 정렬

  • 설명

    • 선택 정렬로 풀이

    • sort함수로도 해결 가능

  • 풀이

    • 선택 정렬

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      n = int(input())
      array = list()

      for _ in range(n):
      array.append(int(input()))

      for i in range(n):
      min_index = i
      for j in range(i+1, n):
      if array[min_index] > array[j]:
      min_index = j
      array[i], array[min_index] = array[min_index], array[i]

      for i in array:
      print(i)
    • 기본 라이브러리

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      n = int(input())
      array = list()

      for _ in range(n):
      array.append(int(input()))

      array.sort()

      for i in array:
      print(i)

Comment and share

수 찾기

in Algorithm, Hash

백준 4195 : 문제링크

  • 문제유형 : 해시, 배열, 구현

  • 설명

    • python에서 dictionary 자료형으로 HASH 구현가능

    • Union Find 알고리즘 이용

  • 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    def find(x):
    if parent[x] == x:
    return x
    else:
    p = find(parent[x])
    parent[x] = p
    return parent[x]

    def union(x, y):
    x = find(x)
    y = find(y)

    if x != y
    parent[y] = x
    number[x] += number[y]

    test_case = int(input())

    for _ in range(test_case):
    parent = dict()
    number = dict()

    f = int(input())

    for _ in range(f):
    x, y = input().split(' ')

    if x not in parent:
    parent[x] = x
    number[x] = 1
    if y not in parent:
    parent[y] = y
    number[y] = 1


    union(x, y)

    print(number[find(x)])

Comment and share

SHA-256

in Algorithm, Hash

백준 10930: 문제링크

  • 문제유형 : 해시, 구현

  • 설명

    hashlib.sha256 함수로 SHA 256 해시를 구한다.

  • 풀이

    1
    2
    3
    4
    5
    6
    import hashlib

    input_data = input()
    encoded_data = input_data.encode()
    result = hashlib.sha256(encoded_data).hexdigest()
    print(result)

Comment and share

키로거

in Algorithm, Greedy

백준 5397: 문제링크

  • 문제유형 :

  • 설명

    1. 스택을 두 개 생성하고, 스택 두 개의 중앙을 커서라고 생각한다.

    2. 문자 입력: 왼쪽 스택에 삽입

    3. ‘-‘ 입력 : 왼쪽 스택에서 삭제

    4. ‘<’ 입력 : 왼쪽 스택에서 오른쪽 스택으로 이동

    5. ‘>’ 입력 : 오른쪽 스택에서 왼쪽 스택으로 이동

  • 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    test_case = int(input())

    for _ in range(test_case):
    left_stack = []
    right_stack = []
    data = input()
    for i in data:
    if i == '-':
    if left_stack:
    left_stack.pop()
    elif i == '<':
    if left_stack:
    right_stack.append(left_stack.pop())
    elif i == '>':
    if right_stack:
    left_stack.append(right_stack.pop())
    else:
    left_stack.append(i)
    left_stack.extend(reversed(right_stack))
    print(''.join(left_stack))

Comment and share

백준 1874: 문제링크

  • 문제유형 : 큐, 구현, 그리디

  • 설명

    1. queue의 head의 값이 최대값과 동일한 지 확인한다.

    2. 동일하면 지정한 값과 동일한 지 확인한다.

      아니면 값을 queue의 tail로 보낸다

    3. 지정한 값과 동일하면 출력 아니면 값을 제거한다.

  • 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    test_case = int(input())

    for _ in range(test_case):
    n, m = list(map(int, input().split(' ')))
    queue = list(map(int, input().split(' '))
    queue = [(i, idx) for idx, i in enumerate(queue)]

    count = 0

    while True:
    if queue[0][0] == max(queue, key=lambda x : x[0])[0]:
    count += 1
    if queue[0][1] == m:
    print(count)
    break
    else:
    queue.pop(0)
    else:
    queue.append(queue.pop(0))

Comment and share

백준 1874: 문제링크

  • 문제유형 : 스택, 그리디

  • 설명

    1. 스택에 특정 수에 도달할 때까지 push한다.

    2. 스택이 특정 수에 도달하면 pop한다.

    3. 수의 배열을 완성하면 출력하고 불가능하면 NO를 출력한다

  • 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    n = int(input())

    count = 1
    stack = []
    result = []

    for i in range(1, n + 1): # 데이터 개수만큼 반복
    data = int(input())

    while count <= data: # 입력 받은 데이터에 도달할 때 까지 삽입
    stack.append(count)
    count += 1
    result.append('+')

    if stack[-1] == data: # 스택의 최상위 원소가 데이터와 같을 때 출력
    stack.pop()
    result.append('-')
    else: # 불가능한 경우
    print('NO')
    exit(0)

    print('\n'.join(result)) # 가능한 경우

Comment and share

백준 2789 : 문제링크

  • 문제유형 : 배열, 완전탐색

  • 설명

    1. 완전탐색으로 가능한 숫자 조합을 모두 구한다.

    2. 만들어진 조합의 합을 구한다.

    3. 합이 M을 넘지 않았을 때 최대값을 비교하여 갱신한다.

  • 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    n, m = list(map(int, input().split(' ')))
    data = list(map(int, input().split(' ')))

    result = 0
    length = len(data)

    count = 0
    for i in range(0, length):
    for j in range(i + 1, length):
    for k in range(j + 1, length):
    sum_value = data[i] + data[j] + data[j]
    if sum_value <= m:
    result = max(result, sum_value)

    print(result)

Comment and share

음계

in Algorithm

백준 2920 : 문제 링크

  • 문제 유형 : 배열, 구현

  • 설명

    1. 오름차순 변수 ascending, 내림차순 변수 descending 둘 다 True로 설정

    2. 한 문자라도 내림차순이면 ascending False

      한 문자라도 오름차순이면 descending False

    3. 둘 다 False이면 mixed

  • 풀이
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    a = list(map(int, input().split())

    ascending = True
    descending = True

    for i in range(1, 8):
    if a[i] > a[i-1]:
    descending = False
    elif a[i] < a[i-1]:
    ascending = False

    if ascending:
    print('ascending')
    elif descending:
    print('descending')
    else:
    print('mixed)

Comment and share

Yechan Kim

author.bio


author.job