1. 정수

1-1. 최대, 최소

ans = "어떤값"
for num in arr:
    if ans > num:
        ans = num
print(ans)
ans = 999999

# 또는
import sys
ans = sys.maxsize
print(ans)


2. 진법

2-1. 10진수 => 2, 8, 16 진수로 변환

  • 사용 시 슬라이싱을 활용해서 앞에 진법 표현하는 기호는 빼는 방식으로 활용하자
    • bin(num)[2:]
num = 42
print(num)
print(bin(num))   # 바이너리
print(oct(num))   # 옥토
print(hex(num))   # 헥사

2-2. 2, 8, 16진수 => 10진수 변환 : int()함수 활용법

int('0b101010',2)   # 2 = 바이너리
int('0o52',8)       # 8 = 옥토
int('0x2a',16)      # 16 = 헥사
# (중요) 그밖에 다양한 진법 변환도 가능하다
print(int('444',5))   # 5진수 -> 10진수
print(int('555',6))   # 6진수 -> 10진수 등

2-3. 진법 활용 연산 예제 - 백준

""" 백준 2729 - 내가품 """
result = []
for _ in range(int(input())):
    a, b = map(str, input().split())
    temp = str(bin(int(a,2)+int(b,2)))
    result.append(temp[2:])

print("\n".join(map(str,result)))

''' 백준11005 - 블로그 참고 '''
n, b = map(int, input().split())

def total(n,b):    
    result = []
    
    while n > 0:
        n, m = divmod(n, b)   # (중요) n=몫,  m=나머지
        result.insert(0, m)   # 우리가 필요한 숫자는 나머지(m)
    
    digit_map = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'   # 전부 순서대로
    
    encoding = ''    
    for d in result:
        encoding += digit_map[d]
        
    return encoding

print(total(n,b))
''' 백준 2745 - 내가품'''
n, b = input().split()
print(int(n,int(b)))
  • 백준 - 8진수 2진수 : 8진수가 주어졌을 때 2진수로 변환하는 프로그램
''' 백준 1212 - 내가품 '''
a = input()
print(bin(int(a,8))[2:])   # string으로 받은걸 8진수로 변환 후 2진수로 변환 후 슬라이싱
  • 백준 - 2진수 8진수 : 2진수가 주어졌을 때 8진수로 변환하는 프로그램
''' 백준 1373 - 내가품 '''
b = input()
print(oct(int(b,2))[2:])

3. 문자열

3-1. 문자열을 거꾸로 (리스트도 동일!!)

# 문자열 ABCD => DCBA로 바꾸는 코드
alph = "ABCD"
alist = [1,2,3,4]
print(alph[::-1])   # => 문자열일 때!
print(alist[::-1])  # => 리스트일 때도 똑같음!

print(alph)
print(alist)        # => (주의) 값이 바뀌진 않는다!

alph = alph[::-1]
alist = alist[::-1]

print(alph)
print(alist)        # => 이렇게 해야 바뀐다!!

''' 백준 10988 - 내가품 '''
def is_palindrome(a):
    return 1 if a == a[::-1] else 0

print(is_palindrome(input()))

4. 배열(=리스트)

4-1. 1차원 또는 2차원 배열 초기화

# 1차원 배열 생성
arr = [0] * 10
print(arr)

  • 두 정수가 첫째줄에 입력값으로 들어옵니다.
  • 첫 번째 정수는 배열의 가로 크기를, 두 번째 정수는 배열의 세로 크기인 0으로 초기화된 배열을 만들어봅시다.
  • 위의 입력값은 가로 3, 세로 5인 크기의 배열을 0으로 초기화 해야합니다.
# 2차원 배열 생성

n, m = map(int,input().split())
arr = [[0] * n for _ in range(m)]
print(arr)
  • 그래프 만들기
    • 입력은 그래프 형태로 줄 수도 있지만, edge형태로 준다면 graph로 변환해야 함
''' 내가 만든 '''
# n : 노드 수, m : 엣지 수, v : 시작 노드 번호
n, m, v = map(int, input().split())  
# 밑에 코드 보면 알겠지만 필요 없는 배열이었다...
arr = [list(map(int, input().split())) for _ in range(m)]  

check = [False] * (n+1)             # (중요) False로 만들 것

# Create Graph (내가 만듦) - edge는 양방향이므로 둘 다 넣어준다
graph = [[] for _ in range(n+1)]
for i in range(len(arr)):
    graph[arr[i][0]].append(arr[i][1])
    graph[arr[i][1]].append(arr[i][0])
    
print(graph)

''' 다른 사람 코드 (블로그) '''
import sys
input=sys.stdin.readline

n,m,start=map(int,input().split())
visited=[False]*(n+1)

graph=[[] for _ in range(n+1)]

for _ in range(m):
    a,b=map(int,input().split())   # 내 코드와 달리 edge배열을 만들지 않음!
    graph[a].append(b)
    graph[b].append(a)

4-2. 배열(리스트)의 원소를 거꾸로

arr.reverse()
# 또는 arr = arr[::-1]
''' 백준 2588 - 내가 품 '''
a = int(input())
b = list(map(int,input()))

j = 0
result = 0

b.reverse()

for i in range(len(b)):
    print(a * b[i])
    result = result + ((a * b[i]) * pow(10, j))
    j = j + 1

print(result)

4-3. 배열 원소 갯수

data = [1,2,9,3,2,5,7,7,2,3]

print(data.count(3))   # 3의 개수 찾기

''' 백준 2490 - 내가 푼(윷놀이) '''
result = []

for _ in range(4):
    yut = list(map(int,input().split()))    
    result.append({1:'A', 2:'B', 3:'C', 4:'D', 0:'E'}.get(yut.count(0), "default")) # (중요) 0:E는 "모"의 경우임

print("\n".join(result))

4-4. 원소 중복 제거 - set 사용

''' set 자료형 활용 : (중요) set은 원소의 중복이 없다. '''
alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c', 'd' ] 

print(set(alpha))

alpha = list(set(alpha)) 

print(alpha)
# 2차원 리스트 중복 제거
lst = [[1,2], [1,2], [1]] 

a = list(set(map(tuple, lst)))
print(a)
print(a[0])
print(a[1])
print(list(a[1]))

4-5. 배열 정렬 - sort() : O(n)

''' 오름차순 정렬 '''
alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c', 'd' ] 

alpha.sort()

print(alpha)
''' 내림차순 정렬 '''
alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c', 'd' ] 

alpha.sort(reverse=True)

print(alpha)

''' 역으로 바꾸기랑 다른거다!! '''
alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c', 'd' ] 

alpha.reverse()

print(alpha)

  • x0를 기준으로 정렬하고, x[0]이 같다면, x1를 기준으로 오름차순 정렬
  • 내림차순 정렬을 하고싶다면, -x[0]
''' 배열의 원소가 한 개가 아닌 리스트일 경우 '''
alpha.sort(key=lambda x:(x[0], x[1]))
''' 백준 11650 '''
''' 블로그 정답 => 시간초과 판정 아님 '''
arr = []
for _ in range(int(input())):
    arr.append(list(map(int, input().split())))

arr.sort(key=lambda x:(x[0], x[1]))
 
for e in arr:
    print(str(e[0]) + " " + str(e[1]))

5. if-else문 줄이기 팁(중요)

if a>b:
    res = a
else:
    res = b
''' 줄이는 방법 '''
res = a if a > b else b
profile
Do My Best

0개의 댓글