Baekjoon Online Judge 5585번 거스름돈 문제

백준 저지 5585번 거스름돈 문제 Pseudo code + Python code

1
2
3
4
5
6
7
8
9
10
11
product_price = int(input())
coin_unit = [1, 5, 10, 50, 100, 500]
coin_unit.sort(reverse=True)
changes = 1000 - product_price
coin_count = 0
for unit in coin_unit:
if changes >= unit:
num_of_coin = changes // unit
changes -= unit * num_of_coin
coin_count += num_of_coin
print(coin_count)

Read More

Baekjoon Online Judge 10814번 나이순 정렬문제

백준 저지 10814번 나이순 정렬문제 Pseudo code + Python code

(오류1) 손코딩을 한 부분에 오류가 있다. age, name을 한 줄에서 입력받는데, 두 입력 데이터의 타입은 같지 않기 때문에 integer 형으로만 설정할 수 없다.
이 경우에는 string 형으로 우선 받고나서 데이터를 삽입할때 integer형으로 type casting을 해주면 된다.
(오류2) 두번째 오류는 문제의 조건에서 튜플의 첫번째 요소(나이)로 우선 오름차순 정렬을 하고, 튜플의 두번째 요소(이름)으로 오름차순 정렬을 하는 문제가 아닌, 나이로 오름차순 정렬을 하고, 나이가 같으면 입력한 순서대로 정렬을 하는 문제였다. 따라서 정렬 조건을 key = lambda x:(x[0], x[1]) 가 아닌 key = lambda x: x[0]로만 해주면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
test_case = int(input())
join_members = []
for _ in range(test_case):
age, name = map(str, input().split(' '))
join_members.append((int(age), name))
join_members.sort(key=lambda x:x[0])
for i in join_members:
print(i[0], i[1])

# input :
3
21 Junkyu
21 Dohyun
20 Sunyoung
# output :
20 Sunyoung
21 Junkyu
21 Dohyun

Read More

Baekjoon Online Judge 5397번 키로거 문제

백준 저지 5397번 키로거 문제 Pseudo code + Python code

위에서 손코딩한 코드에서는 left_stack과 right_stack을 for문 외부에서 초기화 해주었지만, 이렇게 해주면 매 테스트 케이스마다 초기화된 스택을 사용할 수 없기 때문에 for-loop 내에서 left_stack과 right_stack을 초기화 시켜주어야 한다.

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 = []
p = input()
for i in p:
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))

Read More

210127 Python + Self Development TIL - Function, *args, **kwargs, Recursive function

Python

TO DO LIST

Python

오늘 수업을 통해 배운 내용

  • Python 메인 강의

    • 과제점검

      • Ethiopian Multiplication

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        result = 0
        print('{:7},{:7}, ,etc'.format('num1', 'num2'))
        while num > 0:
        if num1 % 2 == 0:
        print('{:7}, {:7}, Pass'.format(num1, num2))
        else:
        print('{:7}, {:7}, Keep'.format(num1, num2))
        result += num2
        num1 = num1//2
        num2 = num2*2
        print("The result is {}".format(result))
        <!-- more -->
        
      • Monty Hall Simulation

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        import random
        stay = 0
        switch = 0
        trial = int(input("How many times do you want?"))
        for _ in range(trial):
        # goats: 0, sportcar: 1
        doors = [0, 0, 1]
        random.shuffle(doors)
        # print(doors)
        users_choice = doors.pop()
        # print(users_choice, doors)
        doors.remove(0)
        if users_choice == 1:
        stay += 1
        else:
        switch += 1

        print("stay: {}, switch: {} for {}th trial".format(stay/trial, switch/trial, trial))

      Read More

210127 TypeScript TIL

이 포스팅은 Udemy : Understanding TypeScript - 2021 Edition 에서 개별 학습한 내용을 기반으로 작성하였습니다.

오늘 공부한 내용

  • TypeScript에 대한 개념 이해

    • TypeScript는 JavaScript의 Superset으로, 기존의 자바스크립트 위에 building된 언어이다.
      기존에 JavaScript에는 없던 각종 이점들을 추가한 언어라고 생각하면 된다. 하지만 브라우저에서는 실행할 수 없기 때문에 작성한 TypeScript는 JavaScript로 컴파일 된 후에 실행된다.


  • TypeScript의 이점

    • JavaScript에서의 변수는 단순히 상수(const)와 변수(let)으로만 구분해서 사용하고, 별도로 타입(Type)을 지정하지 않았다. 이로인해 함수의 인자로 넘겨주는 인자값이 어떤 것이든 입력이 되었고, 이로 인해 발생하는 에러는 컴파일(compile)단계에서 잡아서 수정할 수 있었다. 하지만 TypeScript를 사용해서 개발하게 되면, 개발단계에서 미리 에러를 잡아서 수정할 수 있다.
    • 물론 JavaScript에서도 변수의 타입을 검사해서 유효성 검사 처리를 추가할 수 있다. 하지만 TypeScript를 사용해서 Type을 지정해서 처리하는 것 만큼 효율적이지 않다.
    1
    2
    3
    4
    5
    6
    7
    8
    function add(num1, num2) {
    if (typeof num1 === 'number' && typeof num2 === 'number') {
    return num1 + num2;
    } else {
    return +num1 + +num2;
    }
    }
    console.log(add('2', '3'));

    Read More

210126 Self Development TIL

오늘 공부한 내용

Baekjoon Online Judge 2798번 블랙잭 문제

백준 저지 2798번 문제 Pseudo code + Python code

이 문제는 3중 for-loop을 활용하여 주어진 숫자 리스트 내의 숫자들을 3개 단위로 묶을 수 있는 모든 경우의 수를 고려하여 연산을 한다.

3개 단위로 묶인 합이 입력한 m의 값보다 크지 않으면서 가장 큰 수를 출력하도록 하는 문제이다.

Read More

Monty Hall Problem

Monty Hall Problem (Pseudo code + Python code)

앞서 작성한 Pseudo code와 손코딩 한 부분의 코드상에 논리적 문제를 발견했다. 만약 사용자가 선택한 문과 당첨 문이 일치하지 않는 경우, 진행자는 당첨문과 사용자가 선택한 문을 제외한 범위 내의 문을 열어서 보여줘야 하기 때문에 이 경우에는 당첨 문과 참가자가 선택한 문 둘 다 제거를 해줘야 한다. 만약 사용자가 선택한 문과 당첨 문이 같은 경우에는 사용자가 선택한 문을 제외한 두 개의 문 중에서 하나를 선택해서 문을 열어서 보여주면 된다.

Read More

210125 Python TIL - 삼항연산자(Ternary operator)와 for-loop, while-loop

Python

Python

오늘 배운 내용

  • Python 과제 점검
    • 21년 1월 3주차 파이썬 과제 풀이 정리하기
  • Python 메인 강의
    • 과제점검
    • 삼항연산자 (Ternary operator)
    • Iteration(Loop)
      • for
      • while
    • 문자열 * True / 문자열 * False
    • break, continue in conditional statement

21년 1월 3주차 파이썬 과제 풀이 정리하기

기본적으로 문제풀이에서 요구하는 것은 isupper()와 islower()를 사용하여 주어진 문자열, 배열의 값을 소문자는 대문자로, 대문자는 소문자로 토글하는 문제였다.

아래는 내가 작성한 문제의 답으로, solution1에서는 isupper()와 islower()를 사용해서 입력된 값을 조건처리하여 작성하였다.
solution2에서는 입력된 값의 조건처리를 알파벳의 ASCII 코드 값을 활용하여 접근하였다.

solution1과 solution2에서 공통적으로 입력된 값이 문자열인지 리스트인지 구분하여, 문자열인 경우 문자열의 값을 리스트화하고, 출력을 할때에도 입력된 값이 문자열인 경우와 그렇지 않은 경우를 구분하여 출력하는 구문도 조건처리하였다.

Read More