import math

cumdata = 1
ishere = False

for _ in range(5):
    cumdata *= int(input())
    if math.sqrt(cumdata).is_integer() == True:        
        print('found')
        break
else:
    print('not found')

5개의 값을 입력 받아 차례 대로 곱했을때 제곱수가 있는 경우 found, 없는 경우 not found 를 출력하는 코드이다.

 

보통 flag 라는 변수를 이용해 처리하지만 python의 for-else 문을 이용하여 flag 함수를 제거할 수 있다. 

'Program > Python' 카테고리의 다른 글

가장 많이 나오는 문자열 찾기 (collections의 Counter 함수)  (0) 2022.08.02
itertools의 순열(permutation), 조합(combination)  (0) 2022.08.02
Sinc 함수 구현  (0) 2021.05.06
K번째 큰 수  (0) 2021.05.06
람다 표현식  (0) 2021.04.24
from collections import Counter

my_str = 'dfdefdgf'
data_dict = dict(Counter(sorted(my_str)))

all_values = data_dict.values()
max_value = max(all_values)

answer = ''.join( [key for key in list(data_dict.keys()) if max_value is data_dict[key]] )
print(answer)

collections의 Counter 함수는 list 함수를 입력으로 받아서 dict 형태로 출력을 한다.

이때 key 값을 list의 element 값

value 값은 element의 중복 수 이다.

 

이 특징을 잘 이용하면 직관적으로 풀기 쉽다.

'Program > Python' 카테고리의 다른 글

for-else 문  (0) 2022.08.02
itertools의 순열(permutation), 조합(combination)  (0) 2022.08.02
Sinc 함수 구현  (0) 2021.05.06
K번째 큰 수  (0) 2021.05.06
람다 표현식  (0) 2021.04.24
from itertools import permutations
from itertools import combinations

mylist = [1, 2, 3]

#순열
print(list(permutations(mylist,  len(mylist))))
>> [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]

#조합
print(list(combinations(mylist, 2)))
>> [[1,2],[1,3],[2,3]]

 

코딩 테스트를 하다보면 순열, 조합 문제가 나온다. 

예전 C++으로 문제를 풀던 시절에는 재귀함수를 이용해서 풀었겠지만 이렇게 쉽게 구현되어 있다.

 

'Program > Python' 카테고리의 다른 글

for-else 문  (0) 2022.08.02
가장 많이 나오는 문자열 찾기 (collections의 Counter 함수)  (0) 2022.08.02
Sinc 함수 구현  (0) 2021.05.06
K번째 큰 수  (0) 2021.05.06
람다 표현식  (0) 2021.04.24

공부중에 매트랩의 sinc 함수를 찾지 못해서

매트랩은 아니지만 python 전용으로 sinc 함수를 만들어 봤다. 주의할 부분은 sin 함수 안의 매개변수 값의 단위가 degree 인지 radian 인지 명확히 인지 해야 한다. python math의 sin은 radian이다.

즉  3.141592 radian = 180 degree이다.

 

 

sinc 함수 표현 식, https://kr.mathworks.com/

 

 

Code
import math 
import matplotlib.pyplot as plt
import numpy as np

def sinc(x):
    if x == 0:
        return 1
    else:
        return (math.sin(math.pi * x) / (math.pi * x))

x = np.linspace(-5,5,1000)
y = []

for valueX in x:
    y.append(sinc(valueX))


plt.plot(x,y)
plt.show()
결과

 

 

 

첫 줄 입력 자연수 N(3 <=N <=100), 자연수 K (1 <=K <=50)

둘 째줄 입력 자연수 1 ~ 100 사이의 자연수 N개의 배열

 

N개의 배열에서 3개의 값을 조합하여 구할 수 있는 값 중에 K 번째로 큰 값 구하기

주의해야 할 처리 사항 : 중복 숫자 값 입력 가능, K 번째 큰 수에서 중복하는 값은 무시 (ex. [5,5,4,2]에서 2번째로 큰 값은 4)

def find(arraySortedData, index, arraySumData, arrayMaxData,depth):
        
    if depth == 3:
        arrayMaxData.append(arraySumData[0])
        return
    
    for i in range(index, len(arraySortedData)):
        arraySumData[0] += arraySortedData[i]
        find(arraySortedData, i + 1, arraySumData, arrayMaxData, depth + 1)
        arraySumData[0] -= arraySortedData[i]
    

N, K = map(int, input().split())
arrayData = list(map(int,input().split()))
arrayMaxData = []
arraySumData = [0]

find(arrayData, 0, arraySumData, arrayMaxData, 0)

arrayMaxData.sort(reverse=True)

count = 1
preData = arrayMaxData[0]
for i in range(1, len(arrayMaxData)):
    
    if count == K:
        print(preData)
        break
        
    if preData != arrayMaxData[i]:
        count += 1
        preData = arrayMaxData[i]

 

 

후기  

재귀 함수를 이용해서 결과를 구했다. 처음에는 입력 배열 값을 오름차순 정렬하여 재귀 함수를 통해 순회하는 값은 자동으로 오름차순 정렬이 되어있는 배열인 줄 알고 착각을 했다. 하지만 결과는 아니었다. 이 문제 때문에 10분 정도 삽질했다. 추가로 c++에서는  함수에 &예약어를 통해 call by reference를 사용했지만 python은 참조 예약어를 몰라서 배열을 만들어 사용했다.

 

'Program > Python' 카테고리의 다른 글

itertools의 순열(permutation), 조합(combination)  (0) 2022.08.02
Sinc 함수 구현  (0) 2021.05.06
람다 표현식  (0) 2021.04.24
2차원 리스트 다루기  (0) 2021.04.13
List 다루기(2/2)  (0) 2021.03.22

python의 내장함수를 사용할때 매우 유용하다.

 

def plus_on(arr):
    return arr+1

a=[1,2,3]

#정의한 함수 사용
print(list(map(plus_on,a)))
출력 : [2,3,4]

#함수 없이 람다 사용
print(list(map(lambda x: x + 2, a)))
출력 : [3,4,5]

#간단한 람다 표현식
plus_two = lamnda x: x+2
print(plus_two(1))
출력 : 3

'Program > Python' 카테고리의 다른 글

Sinc 함수 구현  (0) 2021.05.06
K번째 큰 수  (0) 2021.05.06
2차원 리스트 다루기  (0) 2021.04.13
List 다루기(2/2)  (0) 2021.03.22
List 다루기 (1/2)  (0) 2021.03.21
#1x3 행렬 만들기
a=[0] * 3
print(a)
#출력 : [0,0,0]

#3x3 행렬 만들기
b = [[0] * 3 for  _ in range(3)]]
print(b)
#출력 : [[0,0,0],[0,0,0],[0,0,0]]

#3x3 행렬 특정 위치 값 수정 하기
b[1][0] = 2
print(b)
#출력 : [[0,0,0],[2,0,0],[0,0,0]]

#3x3 행렬 출력하기
for x in b:
	print(x)
#출력
[0,0,0]
[2,0,0]
[0,0,0]

for x in b:
	for value in x:
    	print(value, end=' ')
    print()
#출력
0 0 0
2 0 0
0 0 0 


 

그래프 알고리즘 다룰때 자주 사용한다.

2차원 배열 데이터 처리는 알아두면 매우 유용!

'Program > Python' 카테고리의 다른 글

K번째 큰 수  (0) 2021.05.06
람다 표현식  (0) 2021.04.24
List 다루기(2/2)  (0) 2021.03.22
List 다루기 (1/2)  (0) 2021.03.21
문자열 내장함수  (0) 2021.03.15

1. 원하는 인덱스 범위 출력하기

a = list(range(0,10)) # list생성 [0,1,2,3,4,5,6,7,8,9]
print(a[:3])	      # list 0 ~ 2 인덱스 출력
print(a[1:3])         # list 1 ~ 2 인덱스 출력

2. 반복문 활용 방법

a = list(range(0,10)) # list생성 [0,1,2,3,4,5,6,7,8,9]

for i in range(len(a)):# i는 0~9까지 순환
	print(a[i])
    
for i in a:            # i에게 값 타입 반환 value
	print(i)
    
for i in enumerate(a): # i에게 튜플 타입 반환 (index, value)
    print(i)
    
for index, value in enumerate(a): # index에게 a의 index 반환, value에게 a의 value값 반환
    print(index, value)
    
isOver = all(11>x for x in a)    # list a의 값이 모두 11을 넘기지 못하므로 True 반환
isUnder = all(11<x for x in a)    # list a의 값이 모두 11을 넘기지 못하므로 False 반환

3. 값 변경

a = list(range(0,10)) # list생성 [0,1,2,3,4,5,6,7,8,9]

a[0] = 2              # list변경 [2,1,2,3,4,5,6,7,8,9]

1. 선언

a = list()				# list 생성
b = []					# list 생성
c = [1,2,3]				# 1~10까지의 list 생성
d = list(range(1,11)) 			# 1~10까지의 list 생성

2. 인덱스 접근

a = [1,2]	#list 1~2 생성
print(a[1]) # 2 출력

3. list 끼리 더하기

a = [1,3]	#list 1,3 생성
b = [3,5]   #list 3,5 생성
c = a + b   #list 1,3,3,5 생성

4. list 값 추가 및 제거

a = []	#list 생성

a.append(6) 	# list에 추가 6 저장, list 상태 : 6
a.append(7) 	# list에 추가 7 저장, list 상태 : 6, 7
a.append(8) 	# list에 추가 8 저장, list 상태 : 6, 7, 8
a.append(9) 	# list에 추가 9 저장, list 상태 : 6, 7, 8, 9

a.insert(1,2)	# list 1번 인덱스에 2추가 저장, list 상태 : 6, 2, 7, 8, 9

a.pop()			# list 가장 마지막 인덱스 삭제, list 상태 : 6, 2, 7, 8
a.pop(2)		# list 가장 2번째 인덱스 삭제, list 상태 : 6, 2, 8

a.remove(6)		# list에서 데이터 6 삭제, list 상태 : 2, 8

locateValue = a.index(8) # list에서 데이터가 8인 인덱스 출력, locateValue에 1 저장

a.clear()	#모든 데이터 삭제

5. list 값 통계

a = list(range(1,11))	#list 생성, 1~10 저장

sumvalue = sum(a) #list a에 저장되어있는 1~10까지의 합 저장
maxvalue = max(a)  #list a에 저장되어있는 1~10까지의 최대값 저장
minvalue = min(a)  #list a에 저장되어있는 1~10까지의 최소값 저장

6. list  셔플, 정렬

import random as r #랜덤함수 필요

a = list(range(1,11))	# list 생성, 1~10 저장

r.shuffle(a)		# list a 셔플
a.sort()		# list a 오름차순 정렬
a.sort(reverse=True)	# list a 내림차순 정렬

 

1. 대문자 변환

msg = "Hello"

#문자열 모두 대문자 출력
print(msg.upper())

2. 소문자 변환

msg = "Hello"

#문자열 모두 소문자 출력
print(msg.lower())

3. 특정 문자 또는 문자열 찾기

msg = "Hello"

#문자의 인덱스 출력
print(msg.find('e'))

#문자열의 시작 인덱스 출력
print(msg.find("el"))

4. 특정 문자 갯수 찾기

msg = "Hello"

#문자열에 문자가 포함한 갯수 출력
print(msg.count('e'))

#문자열에 문자열이 포함한 갯수 출력
print(msg.count("el"))

5. 문자열 자르기

msg = "Hello"

#문자열 자르기 0번 인덱스에서 시작하는 2번 인덱스 이전까지 문자열 출력
print(msg[:2]) 

#문자열 자르기 1번 인덱스에서 시작하는 2번 인덱스 이전까지 문자열 출력
print(msg[1:2])

6. 문자열 길이

msg = "Hello"

#문자열 길이 출력
print(len(msg)) 

7. 문자열 순회 하기

msg = "Hello"

for i in msg:
	print(i) # "Hello 출력"
    
for i in range(len(msg)):
	print(msg[i]) # "Hello 출력"

8. 대문자 또는 소문자 인지 확인하기

msg = "Hello"

for x in msg:
	#대문자 체크
	if x.isupper():
    	print(x)
        
    #소문자 체크
    if x.islower():
        print(x)

9. 알파뱃인 경우 확인하기 (한글도 알파뱃으로 취급함)

msg = "H1e2l3lo123"

for i in msg:
	if i.isalpha():
    	print(i) #Hello 출력                         

10. 해당 문자의 아스키 코드 출력

msg = "Hello"

print(ord(msg[0]))                    

11. 아스키 코드를 문자열로 출력

msg = 65

print(chr(msg))                    

12. 문자열 왼쪽, 가운데, 오른쪽 정렬

s = 'abc'#문자열
n = 7 #문자열 총 길이

print(s.ljust(n)) # >>abc
print(s.center(n))# >>  abc   
print(s.rjust(n)) # >>    abc

+ Recent posts