땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • 이것이 리눅스다 with Rocky Linux9
  • E
  • I
  • D
  • ㅗ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Algorithm/concept

Coding Test(Grammar) - Python

2021. 11. 2. 17:24

Input

# map()을 이용하여 list에 저장
data = list(map(int,input().split()))
[1, 1]

#map()을 이용하여 두 변수에 저장
a,b = map(int,input().split())
1 1
#sys.stdin.readline()을 사용하면 줄 바꿈 기호가 입력 되기때문에 rstrip() 같이 사용

data = list(map(str,sys.stdin.readline())) #['w', 'a', '\n']
num = list(map(str,input())) #['w', 'a']
# 123 => [1,2,3], 각 자리수 따로따로 저장됨
data = list(map(int,str(i)))
data = list(map(int,input()))

 

Dictionary

# Key와 Value를 한 쌍으로 갖는 자료형이다. 
# Key에는 변하지 않는 값을 사용하고, Value에는 변하는 값과 변하지 않는 값 모두 사용할 수 있다.
dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}

#키 데이터만 담은 리스트
dic.keys()

#값 데이터만 담은 리스트
dic.values()

# dic 쌍 추가/삭제
a = {1: 'a'}

#추가
a[2] = 'b'
a['name'] = 'pey'
a => {1: 'a', 2: 'b', 'name': 'pey'}

#삭제
del a[1] 
a => {2: 'b', 'name': 'pey'}


items={'커피음료':7,"펜":3}

print(items['펜'])
>> 3

contact = {'성':'이','이름':'지원','직장':'동의대학교'}
for a,b in contact.items():
    print(a,':',b)

성 : 이
이름 : 지원
직장 : 동의대학교

#dictionary 생성
data_lower = {key : value.lower() for key, value in data.items()}


#key로 value 찾기
data2.get(key)

#value로 key찾기
for key, value in data_lower.items():
    if value == sorted(data_lower.values())[0]:
        print(data.get(key))

Tuple

#한 번 선언된 값을 변경할 수 없다
#리스트에 비해 상대적으로 공간 효율적
#서로 다른 성질의 데이터를 묶어서 관리 - 최단 경로 알고리즘(비용,노드 번호)

# 데이터의 나열을 해싱(Hashing)의 키 값으로 사용해야 할 때

Iist

list.split() # split함수는 어떤 문자를 기반으로 나누는 함수
list.strip() # 특정 문자열 및 공백 제거
#리스트 만들기
data = list(range(1,n+1))
#append(x)는 리스트의 맨 마지막에 x를 추가하는 함수이다.
data = [1, 2, 3]
data.append(4)
data => [1, 2, 3, 4]

#pop()은 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제한다.
data = [1,2,3]
data.pop() #3
data => [1, 2]

#pop(x)는 리스트의 x번째 요소를 돌려주고 그 요소는 삭제한다.
data = [1,2,3]
data.pop(1) #2
data => [1, 3]


#index(x) 함수는 리스트에 x 값이 있으면 x의 위치 값을 돌려준다.
#리스트에 존재하지 않는 값을 사용하면 값 오류(ValueError)가 발생한다.
data = [1,2,3]
data.index(3) #2
data.index(1) #0


#insert(a, b)는 리스트의 a번째 위치에 b를 삽입하는 함수이다.
data = [1,2,3]
data.insert(0, 4) #[4, 1, 2, 3]


#remove(x)는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수
#a가 3이라는 값을 2개 가지고 있을 경우 첫 번째 3만 제거되는 것을 알 수 있다.
data1 = [1, 2, 3, 1, 2, 3]
data1.remove(3) #[1, 2, 1, 2, 3]

#count(x)는 리스트 안에 x가 몇 개 있는지 조사하여 그 개수를 돌려주는 함수이다.
data1.count(1) #2

#del a[x]는 x번째 요솟값을 삭제한다.
data = [1, 2, 3]
del data[1]
data => [1, 3]

#슬라이싱 기법을 사용하여 리스트의 요소 여러 개를 한꺼번에 삭제할 수도 있다.
data = [1, 2, 3, 4, 5]
del data[2:]
data => [1, 2]


#sort, reverse
data.sort()
data.sort(reverse=True)

#key값을 이용해서 특정한 조건으로 정렬을 수행할 수 있다
data.sort(key=str.lower)



#key값 응용버전 : lambda를 이용한 2차원 정렬
#1열, 0열 순서로 오름차순 정렬을 한다
data.sort(key=lambda x: (x[1], x[0]))

#압축해제
print(*data)
data => 1,2,3,4,5

string

#문자열에서만 사용 가능한 함수
#찾는 문자가 문자열 안에서 첫 번째에 위치한 순서를 숫자로 출력한다.
#만일 찾는 문자가 문자열 안에 없는 경우에는 -1을 출력하는 함수
str.find()
string.upper #문자열 대문자로 변경하는 함수

string.lower #문자열 소문자로 변경하는 함수

string.isupper #문자가 대문자인지 확인하는 함수

string.islower #문자가 소문자인지 확인하는 함수
#문자열이 알파벳([a-zA-Z])과 숫자([0-9])로만 구성되었는지 확인
str.isalnum()

iteration

for x in reversed(range(num)): #for x in range(n,0,-1) -> 5~1
    print(x+1)			#range(5) -> 0~4
				#reversed(range(5)) -> 4~0
for x in data: 		#list안에 원소들을 각각 인자로 받을 때 사용
    if not x in data2: 	#list안에 원소를 찾고 싶을 때 사용
        data2.append(x)
for x in arr[1:]: #list의 특정 부분부터 반복문 수행
#enumerate()
#인덱스(index)와 원소를 동시에 접근하면서 루프 돌리기 
for i, letter in enumerate(['A', 'B', 'C']):
	print(i, letter)


0 A
1 B
2 C

 

print

for i in range(1,num+1): #print()안에서 문자열을 여러번 쓸 때 *를 이용해서 여러번 가능
    print(" " * (num-i) + "*" * i)
print(min(data),end=" ")
print(max(data))
------------------------------------------
print(‘{} {}’.format(min(data),max(data)) #이렇게 사용 가능
print(f'{result:.3f}%') #소수 세 번째 자리까지 표시
print('{0:02d}'.format(room)) #정수를 2자리로 표현(3을 03, 4를 04로 표현)
# f-string(python>=3.6)
s = 'coffee'
n = 5
result1 = f'저는 {s}를 좋아합니다. 하루 {n}잔 마셔요.'
print(result1)
print(':'.join(time_list))

10:20:30

sep(separation) 

영단어 그대로, 분리하여 출력한다. 다만 분리할 (갈라놓을 문자를 지정할 수 있다.) 이것을 구분자라고 한다.

예를 들어서 아래처럼 사용 할 수 있다.

print('S','E','P', sep='@')

출력 >>>>> S@E@P

S , E , P라는 문자열 사이에 @가 끼워넣어져 출력된다. 즉, 구분자는 @가 된다.

순열, 조합

from itertools import permutations #순열

for i in permutations([1,2,3,4], 2):
    print(i, end=" ")

(1, 2) (1, 3) (1, 4) (2, 1) (2, 3) (2, 4) (3, 1) (3, 2) (3, 4) (4, 1) (4, 2) (4, 3)
from itertools import combinations #조합

for i in combinations([1,2,3,4], 2):
    print(i, end=" ")
    
(1, 2) (1, 3) (1, 4) (2, 3) (2, 4) (3, 4)
for i in product([1,2,3], repeat=2): #중복순열
    print(i, end=" ")
    
(1, 1) (1, 2) (1, 3) (2, 1) (2, 2) (2, 3) (3, 1) (3, 2) (3, 3)
from itertools import combinations_with_replacement #중복조합

for cwr in combinations_with_replacement([1,2,3,4], 2):
    print(cwr, end=" ")
    
(1, 1) (1, 2) (1, 3) (1, 4) (2, 2) (2, 3) (2, 4) (3, 3) (3, 4) (4, 4)

진법 변환

#n진수 → 10진수
print(int('101',2))
print(int('202',3))
print(int('303',4))
print(int('404',5))
print(int('505',6))
print(int('ACF',16))

#10진수 → 2, 8, 16진수
#0b1011,0o13,0xb 같이 출력되는데 앞에 진법표시를 제외하기 위해 slice이용
print(bin(11)[2:])
print(oct(11)[2:])
print(hex(11)[2:])

#10진수 → n진수
def solution(n, q):
    rev_base = ''

    while n > 0:
    	#divmod : 몫과 나머지를 tuple 형식으로 반환
        n, mod = divmod(n, q)
        rev_base += str(mod)

    return rev_base[::-1] 
    # 역순인 진수를 뒤집어 줘야 원래 변환 하고자하는 base가 출력
    
print(solution(45, 3))

etc

ord(x) #문자 -> 숫자(아스키코드)
chr(x) #숫자(아스키코드) -> 문자

Collections 모듈의 Counter 클래스를 활용하여 쉽게 홀/짝수 알파벳을 구할 수 있다.

from collections import Counter
check = Counter(word)

Counter({'B': 4, 'A': 3, 'S': 2, 'D': 1})


import collections 
c2 = collections.Counter('apple, orange, grape') 
print(c2.most_common()) #가장 빈도가 많은 것 출력
print(c2.most_common(3)) #특정 문자에 대해 빈도수를 계산

''' 
결과 
[('a', 3), ('p', 3), ('e', 3), ('g', 2), (',', 2), ('r', 2), (' ', 2), ('n', 1), ('l', 1), ('o', 1)] 
[('a', 3), ('p', 3), ('e', 3)]
'''
#python 2차원 리스트의 대해서 원소 하나하나의 대한 min, max를 하는법

#단순히 2차원 리스트에 min, max를 쓰게 되면 1차원 리스트로 return
#따라서, map함수를 이용해 간단히 해결 
start = min(map(min,ground))
end =  max(map(max,ground))
s = {1, 5, 1, 1, 1, 3, 7} #class 'set’
s = set()		  #중복 제거
s => {1, 3, 5, 7}
#삼항 연산자(python 미지원)
[condition] ? [true_value] : [false_value] 

#삼항 연산자(python)
[true_value] if [condition] else [false_value]
#python slice
#연속적인 객체들의 자료구조(예: 리스트, 튜플, 문자열)
str[start : end : step]

#Index References
|  a  |  b  |  c  |  d  |  e  |
|  0  |  1  |  2  |  3  |  4  |          # 양수의 경우
| -5  | -4  | -3  | -2  | -1  |          # 음수의 경우


#문자열, 리스트를 거꾸로 가져온다
str[::-1]

 

파이썬의 zip과 unpacking 을 이용하면 코드 한 줄로 리스트를 뒤집을 수 있습니다.

mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = list(map(list, zip(*mylist)))

 

# for i in range(0)을 하면 에러가 날 것 같지만 반복할 횟수가 0인 의미 이므로 아무실행도 일어나지않음

 

# 여러조건의 swhich문을 써야할꺼같을땐 조건들을 list에 저장한 후 index로 접근해보자

# 최대공약수(GCD) : 두 자연수의 공통된 약수 중 가장 큰수

    최소공배수(LCM) : 두 자연수의 곱 / 최대공약수

 

#python의 재귀 깊이의 default 값은 1000으로 설정되어 있다는 것.

(문제에서 요구하는 n은 10000까지였기 때문에 100000까지 제한을 늘려주었다.)
(이렇게 제한을 늘려도 너무 깊은 재귀는 실행되지 않는다고 했다.(정확하지 않음))

import sys
sys.setrecursionlimit(10 ** 6)

'Algorithm > concept' 카테고리의 다른 글

Coding Test(다이나믹 프로그래밍)  (0) 2021.12.16
Coding Test(이진 탐색)  (0) 2021.12.16
Coding Test(DFS/BFS)  (0) 2021.12.15
Coding Test(그리디 & 구현)  (0) 2021.12.14
Coding Test(Algorithm) - Python  (0) 2021.11.02
    'Algorithm/concept' 카테고리의 다른 글
    • Coding Test(이진 탐색)
    • Coding Test(DFS/BFS)
    • Coding Test(그리디 & 구현)
    • Coding Test(Algorithm) - Python
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바