10진수 n진수 변환

  • int 함수의 2번째 인자를 활용하여 8, 16, 2진수 문자열을 정수형(int)로 형변환
  • int(문자열, n) 
    • n : 8(8진수), 16(16진수), 2(2진수)

oct() 함수

  • 10진수 -> 8진수 문자열
  • '0o' 가 붙음

hex() 함수

  • 10진수 -> 16진수 문자열
  • '0x' 가 붙음

bin() 함수

  • 10진수 -> 2진수
  • '0b'가 붙음
<문제> 이진수 더하기
이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.

제한사항
return 값은 이진수를 의미하는 문자열입니다.
1 ≤ bin1, bin2의 길이 ≤ 10
bin1과 bin2는 0과 1로만 이루어져 있습니다.
bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.

 

🪄solution

def solution(bin1, bin2):
	return bin(int(bin1, 2) + int(bin2, 2))[2:]

'Python > 공부' 카테고리의 다른 글

파이썬 최대공약수, 최소공배수 함수 - gcd, lcm  (2) 2023.01.05
입력  (0) 2022.12.31
리스트 컴프리헨션  (0) 2022.12.31
Python 내장함수 - enumerate  (0) 2022.03.23
클래스  (0) 2022.03.18

최대공약수 함수 gcd

  • greatest common divisor
  • import math
  • math.gcd(n1, n2, ... )
    • 인자로 숫자들을 입력
    • 0개부터 n개까지
  • 인자로 들어온 숫자들의 최대공약수(정수)를 반환
    • 인자가 0개인 경우 반환 값은 0. 모든 인자의 값이 0인 경우에도 반환 값은 0
    • gcd(0, n) = n
import math

print(math.gcd(3)) # 3출력
print(math.gcd(3, 6)) # 3출력
print(math.gcd(66, 22, 11)) # 11출력

 

최소공배수 함수 lcm

  • least common multiple
  • import math
  • math.lcm(n1, n2, ... )
    • 인자로 숫자들을 입력
    • 0개부터 n개까지
  • 인자로 들어온 숫자들의 최소공배수(정수)를 반환
    • 인자가 0개인 경우 반환 값은 1. 인자 중에 하나라도 0인 경우에는 0 반환
    • lcm(n, 0) = 0
import math

print(math.lcm(2)) # 2출력
print(math.lcm(2, 4)) # 4출력
print(math.lcm(66, 22, 11)) # 66출력

'Python > 공부' 카테고리의 다른 글

파이썬 n진수 변환  (0) 2023.01.07
입력  (0) 2022.12.31
리스트 컴프리헨션  (0) 2022.12.31
Python 내장함수 - enumerate  (0) 2022.03.23
클래스  (0) 2022.03.18

코딩테스트에서 자주 사용되는 문법

여러 개의 데이터를 입력받을 때, 데이터가 공백으로 구분되는 경우가 많음

입력받은 문자열을 띄어쓰기로 구분하여 각각 정수 자료형의 데이터로 저장하는 코드

 

list(map(int, input().split())

 

코드 실행 순서

  1. input()으로 입력 받음
  2. 입력받은 문자열을 split()을 이용해 공백으로 나눈 리스트로 바꿈
  3. map을 이용하여 해당 리스트의 모든 원소에 int() 함수 적용
  4. 최종적으로 그 결과를 list()로 다시 바꿈

📍입력을 더 빠르게 받는 방법

import sys
sys.stdin.readline().rstrip()

sys 라이브러리를 사용할 때는 한 줄 입력을 받고나서 rstrip() 함수를 꼭 호출해야 함.

readline()으로 입력하면 입력 후 엔터가 줄 바꿈 기호로 입력되는데, 이 공백 문자를 제거하려면 rstrip() 함수를 사용해야 함.

 

<예시>

import sys

# 문자열 입력받기
data = sys.stdin.readline.rstrip()
print(data)

'Python > 공부' 카테고리의 다른 글

파이썬 n진수 변환  (0) 2023.01.07
파이썬 최대공약수, 최소공배수 함수 - gcd, lcm  (2) 2023.01.05
리스트 컴프리헨션  (0) 2022.12.31
Python 내장함수 - enumerate  (0) 2022.03.23
클래스  (0) 2022.03.18

리스트 컴프리헨션

  • 리스트를 초기화하는 방법 중 하나
  • 대괄호([]) 안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화할 수 있음
# 0부터 19까지의 수 중에서 홀수만 포함하는 리스트
array = [i for i in range(20) if i % 2 == 1]

print(array)

[출력]

>> [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

 

# 1부터 9까지의 수의 제곱 값을 포함하는 리스트
array = [i * i for i in range(1, 10)

print(array)

[출력]

>> [1, 4, 9, 16, 25, 36, 49, 64, 81]

 

2차원 리스트를 초기화할 때 매우 효과적으로 사용될 수 있음

# N * M 크기의 2차원 리스트 초기화
n = 3
m = 4
array = [[0] *m for _ in range(n)]

print(array)

[출력]

>> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

 

📍특정 크기의 2차원 리스트를 초기화할 때는 반드시 리스트 컴프리헨션 이용해야함

# N * M 크기의 2차원 리스트 초기화(잘못된 방법)
n = 3
m = 4
array = [[0] * m] *n

print(array)

array[1][1] = 5
print(array)

[출력]

>> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

     [[0, 5, 0, 0], [0, 5, 0, 0], [0, 5, 0, 0]]

내부적으로 포함된 3개의 리스트가 모두 동일한 객체에 대한 3개의 레퍼런스로 인식되기 때문에 모두 5로 변경됨.

 

'Python > 공부' 카테고리의 다른 글

파이썬 n진수 변환  (0) 2023.01.07
파이썬 최대공약수, 최소공배수 함수 - gcd, lcm  (2) 2023.01.05
입력  (0) 2022.12.31
Python 내장함수 - enumerate  (0) 2022.03.23
클래스  (0) 2022.03.18

enumerate는 '열거하다' 라는 뜻

순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴

for문과 함께 자주 사용

 

 

for i, name in enumerate(['body', 'foo', 'bar']):
    print(i, name)

[출력]

>> 0 body
     1 foo
     2 bar

 

순서값과 함께 body, foo, bar가 순서대로 출력됨

enumerate를 for문과 함께 사용하면 자료형의 현재 순서(index)와 그 값을 쉽게 알 수 있음

 

'Python > 공부' 카테고리의 다른 글

파이썬 n진수 변환  (0) 2023.01.07
파이썬 최대공약수, 최소공배수 함수 - gcd, lcm  (2) 2023.01.05
입력  (0) 2022.12.31
리스트 컴프리헨션  (0) 2022.12.31
클래스  (0) 2022.03.18

클래스 개념

클래스

     무엇인가를 계속해서 만들어낼 수 있는 설계 도면

     별모양, 하트모양같은 뽑기의 틀

인스턴스

     클래스에 의해서 만들어진 피조물

     별 또는 하트가 찍힌 뽑기

 

# 클래스의 가장 간단한 예
class Simple:
    pass

# Simple 클래스의 인스턴스
a = Simple()



 

이야기 형식으로 클래스 기초 쌓기

클래스 변수

class Service:
    secret = "영구는 배꼽이 두 개다."

pey = Service()

pey.secret
>>> "영구는 배꼽이 두 개다."

클래스 함수

class Service :
    secret = "영구는 배꼽이 두 개다."    <- 유용한 정보
    def sum(self, a, b):    <- 더하기 서비스
        result = a + b
        print("%s + %s = %s입니다." % (a, b, result))

pey = Service()

pey.sum(1, 1)
>>> 1 + 1 = 2입니다.

self 간단히 살펴보기

class Service :
    secret = "영구는 배꼽이 두 개다."
    def sum(self, a, b):
        result = a + b
        print("%s + %s = %s입니다." % (a, b, result))

pey = Service()

pey.sum(1, 1)
>>> 1 + 1 = 2입니다.

더하기 서비스에 가입했는지 여부를 확인하기 위한 장치 추가

sum 함수의 첫 번째 입력값을 통해 가입 여부를 판단

pey라는 아이디를 가진 사람은 다음 처럼 sum 함수를 사용

pey.sum(pey, 1, 1)

sum 함수는 첫 번째 입력값을 가지고 가입한 사람인지 아닌지를 판단

따라서 첫 번째 입력 인수로 pey라는 아이디를 주면 sum 함수는 pey라는 아이디가 이미 가입되어 있는 것을 확인한 후 서비스를 제공해 줄 것이다.

 

클래스 내 함수의 첫 번째 인수는 무조건 self로 사용해야 인스턴스의 함수로 사용할 수 있다.

 

self 제대로 알기

사용자에게 이름을 입력받아서 더하기 서비스를 제공할 때 앞 부분에 그 이름을 넣어주기

class Service :
    secret = "영구는 배꼽이 두 개다."    
    def setname(self, name):
        self.name = name
    def sum(self, a, b): 
        result = a + b
        print("%s님 %s + %s = %s입니다." % (self.name, a, b, result))

pey = Service()

pey.setname("홍길동")

pey.sum(1, 1)
>>> 홍길동님 1 + 1 = 2입니다.

__init__이란 무엇인가?

아이디를 부여해 줄 때 사람의 이름을 입력받아야만 아이디를 부여해 해주는 방식으로 바꾸기

"인스턴스를 만들 때 항상 실행된다"

class Service :
    secret = "영구는 배꼽이 두 개다."    
    def __init__(self, name):
        self.name = name
    def sum(self, a, b): 
        result = a + b
        print("%s님 %s + %s = %s입니다." % (self.name, a, b, result))

pey = Service("홍길동")

pey.sum(1, 1)
>>> 홍길동님 1 + 1 = 2입니다.

클래스 자세히 알기

클래스란 인스턴스를 만들어내는 공장

클래스는 해당 인스턴스의 설계도라고 할 수 있음

클래스의 구조

class 클래스 이름[(상속 클래스명)]:
    <클래스 변수1>
    <클래스 변수2>
    ...
    <클래스 변수N>
    def 클래스 함수 1(self[, 인수1, 인수2, ...]):
        <수행할 문장1>
        <수행할 문장2>
        ...
    def 클래스 함수 2(self[, 인수1, 인수2, ...]):
        <수행할 문장1>
        <수행할 문장2>
        ...
    def 클래스 함수 N(self[, 인수1, 인수2, ...]):
        <수행할 문장1>
        <수행할 문장2>
        ...
    ...

class라는 키워드는 클래스를 만들 때 사용되는 예약어, 그 바로 뒤에 클래스 이름을 입력해야 한다.

클래스 이름 뒤에 상속할 클래스가 있다면 괄호() 안에 상속할 클래스 이름을 입력한다.

클래스 내부에는 클래스 변수와 클래스 함수들이 있다.

 

사칙연산 클래스 만들기

클래스를 어떻게 만들지 먼저 구상하기

  • 사칙연산 클래스 FourCal
  • 사칙연산을 하려면 두 숫자를 입력받아야겠군 setdata 메서드
  • 더하기 기능 sum 메서드
  • 빼기 기능 sub 메서드
  • 나누기 기능 div 메서드
  • 곱하기 기능 mul 메서드

클래스 만들기

class FourCal:
    def setdata(self, first, second):
        self.first = first
        self.second = second
    def sum(self):
        result = self.first + self.second
        return result
    def sub(self):
        result = self.first - self.second
        return result
    def div(self):
        result = self.first / self.second
        return result
    def mul(self):
        result = self.first * self.second
        return result

'박씨네 집' 클래스 만들기

클래스 구상하기

  • '박씨네 집 ' 클래스 HousePark
  • 박씨 가족의 '이름'을 설정하려면? setname 메서드 -> __init__메서드
  • 박씨 가족 중 한 사람이 여행 가고 싶은 곳을 출력해 볼까? travel 메서드

클래스 만들기

class HousePark:
    lastname = "박"
    #def setname(self, name):
    #    self.fullname = self.lastname + name
    def __init__(self, name):
        self.fullname = self.lastname + name
    def travel(self, where):
        print("%s, %s여행을 가다." %( self.fullname, where))

>>>pey = HousePark("응용")
>>>pey.travel("태국")
박응용, 태국여행을 가다.

클래스의 상속

어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만드는 것

class 상속받을 클래스명(상속할 클래스명)

 

'김씨네 집'이라는 HouseKim을 만들어보자

HouseKim이라는 클래스가 HousePark 클래스를 상속받는 예제

class HouseKim(HousePark):
    lastname="김"

>>>juliet = HouseKim("줄리엣")
>>>juliet.travel("독도")
김줄리엣, 독도여행을 가다.

메서드 오버라이딩

class HouseKim(HousePark):
    lastname="김"
    def travel(self, where, day):
        print("%s, %s여행을 %d일 가네." %( self.fullname, where, day))

>>>juliet = HouseKim("줄리엣")
>>>juliet.travel("독도", 3)
김줄리엣, 독도여행을 3일 가네.

연산자 오버로딩

연산자 오버로딩이란 연산자(+, -, *, /, ...)를 객체끼리 사용할 수 있게 하는 기법

class HousePark:
    lastname = "박"
    def __init__(self, name):
        self.fullname = self.lastname + name
    def travel(self, where):
        print("%s, %s여행을 가다." %(self.fullname, where))
    def love(self, other):
        print("%s, %s 사랑에 빠졌네" %(self.fullname, other.fullname))
    def __add__(self, other):
        print("%s, %s 결혼했네" %(self.fullname, other.fullname))

class HouseKim(HousePark):
    lastname="김"
    def travel(self, where, day):
        print("%s, %s여행을 %d일 가네." %( self.fullname, where, day))

>>>pey = HousePark("응용")
>>>juliet = HouseKime("줄리엣")
>>>pey.love(juliet)
>>>pey + juliet
박응용, 김줄리엣 사랑에 빠졌네
박응용, 김줄리엣 결혼했네

'박씨네 집' 클래스 완성하기

class HousePark: lastname ="박"
    def __init__(self, name):
        self.fullname = self.lastname + name
    def travel(self, where):
        print("%s %s여행을 가다." %(self.fullname, where))
    def love(self, other):
        print("%s, %s 사랑에 빠졌네"%(self.fullname, other.fullname))
    def __add__(self, other):
        print("%s, %s 결혼했네"%(self.fullname, other.fullname))
    def fight(self, other):
        print("%s, %s 싸우네"%(self.fullname, other.fullname))
    def __sub__(self, other):
        print("%s, %s 이혼했네"%(self.fullname, other.fullname))

class HouseKim(HousePark):
    lastname = "김"
    def travel(self, where, day):
        print("%s %s여행 %d일 가네." %(self.fullname, where, day))

pey = HousePark("응용")
juliet = HouseKim("줄리엣")
pey.travel("부산")
juliet.travel("부산",3)
pey.love(juliet)
pey + juliet
pey.fight(juliet)
pey - juliet

>>>박응용 부산여행을 가다.
>>>김줄리엣 부산여행 3일 가네.
>>>박응용, 김줄리엣 사랑에 빠졌네
>>>박응용, 김줄리엣 결혼했네
>>>박응용, 김줄리엣 싸우네
>>>박응용, 김줄리엣 이혼했네

'Python > 공부' 카테고리의 다른 글

파이썬 n진수 변환  (0) 2023.01.07
파이썬 최대공약수, 최소공배수 함수 - gcd, lcm  (2) 2023.01.05
입력  (0) 2022.12.31
리스트 컴프리헨션  (0) 2022.12.31
Python 내장함수 - enumerate  (0) 2022.03.23

+ Recent posts