728x90
반응형

1. 리스트

a = ['사과', '배', '감']

print(a) # 위에꺼 그대로 나옴

 

 

- 리스트 안에 리스트

a = ['사과', '배', ['감', '수박']]

print(a[2][1]) # 감

 

 

- 리스트 요소 추가하기

a = [1,2,3]

a.append(4)

print(a) # [1,2,3,4]

 

 

- 길이 구하기, 마지막 요소 구하기

a = [1,2,3,100]

print(len(a)) # 4
print(a[-1]) # 100

 

 

- 오름차순 내림차순 정렬

a = [1,3,5,2,4,7]

a.sort()
print(a) #[1,2,3,4,5,7]

a.sort(reverse=True)
print(a) #[7,5,4,3,2,1]

 

 

- 리스트에 원하는 요소가 있는지 확인

a = [1,5,6,3,2]

result = (5 in a)
print(result) #True

result = (99 in a)
print(result) #Flase

 

 

 

 

2. 딕셔너리

a = {'name':'bob', 'age':27, 'friend':['영희','철수']}

result = a['name']
print(result) # bob

result = a['friend'][1]
print(result) # 철수

 

 

- 값 넣기

a = {'name':'bob', 'age':27, 'friend':['영희','철수']}

a['height'] = 180
print(a) # height 추가되어서 나옴

 

 

- 값이 있는지 확인

a = {'name':'bob', 'age':27, 'friend':['영희','철수']}

print('height' in a) #False

 

 

- 리스트 안에 딕셔너리

people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]

# people[0]['name']의 값은? 'bob'
# people[1]['name']의 값은? 'carry'

person = {'name': 'john', 'age': 7}
people.append(person)

# people의 값은? [{'name':'bob','age':20}, {'name':'carry','age':38}, {'name':'john','age':7}]
# people[2]['name']의 값은? 'john'

 

 

- 딕셔너리 안에 딕셔너리

people = [
    {'name': 'bob', 'age': 20, 'score':{'math':90,'science':70}},
    {'name': 'carry', 'age': 38, 'score':{'math':40,'science':72}},
    {'name': 'smith', 'age': 28, 'score':{'math':80,'science':90}},
    {'name': 'john', 'age': 34, 'score':{'math':75,'science':100}}
]

print(people[2]['score']['science']) #90

 

728x90
반응형

'언어 > Python' 카테고리의 다른 글

파이썬 함수  (0) 2021.07.16
파이썬 조건문과 반복문  (0) 2021.07.09
파이썬 문자열 다루기  (0) 2021.07.06
파이썬 변수 선언과 자료형  (0) 2021.07.02
파이썬 설치하는 방법  (0) 2021.05.17
728x90
반응형

Python 문제풀이

import sys

n = int(input())
x=[]
for i in range(n):
    # 입력을 input을 쓰지말고 이렇게 활용해야 빠르게 풀 수 있다.
    order= sys.stdin.readline().rstrip()

    if order =='pop':
        if len(x)==0:
            print(-1)
        else:
            print(x.pop())
    elif order =='size':
        print(len(x))
    elif order =='empty':
        if len(x)==0:
            print(1)
        else:
            print(0)
    elif order =='top':
        if len(x)==0:
            print(-1)
        else:
            print(x[len(x)-1])
    else:
        x.append(order.split()[1])

스택을 구현하는 문제입니다. 

 

pop의 경우에는 기본적으로 존재하는 pop함수를 사용하여 리스트 마지막 요소(최근요소)를 지우고 출력하도록 합니다.

 

top의 경우에는 리스트 마지막 요소를 출력하면 되기 때문에 x[리스트길이 -1]을 출력해줍니다.

 

push의 경우는 'push 365' 등으로 입력받아지기 때문에 띄어쓰기를 기준으로 문자열을 분리해주는 split를 사용하고 뒷부분 문자열인 365가 필요하기 때문에 [1]을 붙여주어 append로 추가해줬습니다.

 

다만 이렇게 구현해도 시간초과로 정답처리를 받을 수 없는 경우가 있습니다.

그 경우에는 sys.stdin.readline().rstrip()를 사용하여 입력을 받게된다면 정말 빠르게 효율이 상승합니다.. 평소에도 이걸로 문자열을 받아야하나 싶었습니다.

728x90
반응형
728x90
반응형

Python 문제풀이

n = int(input())
alpa =[]
result =0
now = ''
state = 0 #상태가 -1이라면 그룹단어가 아니고 0이면 그룹단어이다
for i in range(n):
    text= input()

    now = text[0] #현재 이어지고 있는 문자를 뜻하는 변수에 첫 문자를 넣기
    alpa.append(text[0]) #나왔던 문자를 저장하는 리스트에 첫 문자를 넣기

    for j in range(len(text)):
        if(now != text[j]): # 이어지다가 다른 글자가 나왔다면
            for k in range(len(alpa)): # 이미 나왔던건지 검사하고
                if alpa[k]==text[j]: #이미 나왔던거라면
                    state = -1 #이거는 횟수로 칭할 수 없다
                    break
        else: #이어지는 글자라면 계속가자
            continue

        if state == -1:
            break
        else: #나는 문제없는 새로운 문자다
            now = text[j] #현재 이어지는 문자를 새로운 문자로 변경
            alpa.append(text[j]) #새로운 문자를 리스트에 추가

    alpa = [] #나왔던 문자를 저장하는 리스트 초기화

    if state == 0:
        result +=1
    else:
        state =0


print(result)

저도 문제를 풀면서 헷갈려서 주석을 달면서 풀었습니다. 원래 주석은 달아야하는게 맞습니다만..ㅎ

 

간단하게 설명하면 나왔던 문자는 이어짐이 끊긴 상태에서 또 나오면 안됩니다.

그러니 문자의 이어짐을 확인하고 새로운 문자가 나왔다면 그 문자가 이전에 나왔던 문자인지 확인하면 됩니다.

 

alpa는 나왔던 문자를 저장하는 리스트입니다. 새로운 문자가 나왔다면 alpa 안에 그 문자가 있는지 확인합니다.

정말 새로운 문자라면 현재 이어지는 알파벳을 저장하고있는 now 변수에 해당 알파벳을 넣고 새로운 문자이니 alpa리스트에 이 문자를 추가해줍니다.

728x90
반응형
728x90
반응형

Python 문제풀이

n = int(input())
result = []

for i in range(n):
    text = input()
    left=0
    right=0

    for i in range(len(text)):
        if text[i]=='(':
            left +=1
        else:
            right +=1

        if left<right:
            break

    if left==right:
        result.append("YES")
    else:
        result.append("NO")

for i in range(len(result)):
    print(result[i])

처음에 이 문제를 푸는데 괄호의 개수가 서로 다르면 NO라고 출력하도록 해놓고 틀렸다는 것을 알게되었습니다.

'))(('의 경우는 괄호의 개수가 같아도 이상한 괄호가 되기 때문입니다.

 

그 이후에는 정말 복잡하게 문제를 꼬아서 풀고있었습니다.

 

그러다가 포기하고 싶어지던 무렵.. 다시 괄호의 개수를 사용해보자는 생각이 들었는데, 잘 보니 왼쪽 괄호'(' 가 오른쪽 괄호보다 적어지는 순간은 이상한 괄호문장이라는 것을 깨닳았습니다. 

왼쪽괄호 오른쪽 괄호 개수가 같은데 오른쪽이 더 많아지는 순간이 오는 괄호: '()())(' '(()))()(' 

 

 

그리고 괄호의 개수가 다르면 당연히.. 옳지 않은 괄호 문자열입니다.

 

이것을 활용하여 왼쪽 괄호와 오른쪽 괄호의 개수를 반복문을 통해 세면서 왼쪽 괄호보다 오른쪽 괄호가 많아지는 순간이 생기는 문자열은 반복문을 탈출시킵니다. 이때 상태는 왼쪽괄호보다 오른쪽 괄호가 하나 더 많은 상태이기 때문에 NO가 결과리스트에 추가될 것 입니다.

 

이 경우가 아니더라도 왼쪽 괄호가 오른쪽괄호의 개수보다 많은경우가 있다면 반복문을 종료한 뒤 NO가 결과리스트에 추가됩니다.

728x90
반응형
728x90
반응형

Python 문제풀이

text = input()

while len(text) != 0:
    print(text[:10])
    text = text[10:]

 

문자열을 10개씩 끊어서 출력하고 10개씩 끊어서 잘라냅니다. 반복하다보면 마지막 줄에는 다 잘려나가서 문자열이 비게되는 순간이 오는데 while문의 반복을 그때까지만 유지해주면 됩니다.

728x90
반응형
728x90
반응형

1. 문자열 연결

first_name = 'O'
last_name = 'hyeji'

print(first_name + last_name)

: 주의사항으로는 ' '와 " "는 합쳐지지 않고, 100과 ' ' 등 정수와 문자열도 합쳐지지 않습니다.

 

 

 

 

 

2. 문자열과 숫자의 연결

a = '100'
b = str(200)

print(a + b)

: 연결하고 싶다면 숫자를 문자열로 형변환 하여 연결하면 됩니다.

 

 

 

3. 문자열 길이, len( )

text = 'fjdkslvn'

print(len(text)) #8

 

 

 

 

4. 문자열 요소 뽑기, [ : ]

text = 'fjdkslvn'

result = text[:3] #앞에 3개만 출력

print(result)

 

text = 'fjdkslvn'

result = text[3:] #앞에 3개빼고 출력

print(result)

 

 

text = 'fjdkslvn'

result = text[3:6]

print(result) # ksl이 나옵니다. 앞에 3개 빼고 6까지 출력

 

 

 

 

 

 

5. 문자열 자르기, split( )

text = 'fjdkslvn9@gmail.com'

result = text.split('@')
print(result) # [fjdkslvn9, gmail.com] 으로 @ 좌우로 쪼개짐

 

 

 

text = 'fjdkslvn9@gmail.com'

result = text.split('@')[1] # 0번째는 fjdkslvn9고 1번째는 @ 뒷쪽 문자
print(result) # gmail.com

 

 

 

text = 'fjdkslvn9@gmail.com'

result = text.split('@')[1].split('.')[0]
print(result) # gmail

활용) 전화번호의 지역번호만 추출하기

더보기
text = '02-123-4567'

result = text.split('-')[0]
print(result) # -으로 구별된 숫자들 중 맨 앞에있는 것인 지역번호를 출력

 

728x90
반응형

+ Recent posts