[백준] 1~7단계: 파이썬 기초 문법 정리하기
1단계: 입출력과 사칙연산
print('\n') # 줄바꿈
print('\t') # 수평탭
print('\\') # \
print("\'") # '
print('\"') # "
print("이봐","안녕", sep='\n', end='!') # sep 콤마마다 적용, end 맨 마지막 적용
# 이봐
# 안녕!
문자열 포맷팅
문자열 내에 변수, 값, 표현식 등을 삽입하여 문자열을 동적으로 생성하는 방법
num = 10
name = "John"
print("나는 %d살이고, 내 이름은 %s입니다." % (num, name))
map(적용할 함수, 적용할 요소들)
a = map(int, input().split()))
# input().split() 리턴값: 리스트
# 입력받은 값을 공백으로 구분
# int형으로 변환하여
# map 객체로 만들어
# a에 저장한다.
print(a)
# <map object at 0x7fe322fadb20>
# 맵 오브젝트라고 프린트
b = list(a)
print(b)
# 리스트에 옮겨져 비로소 값들이 출력됨
a,b=map(int, input().split())
print(a,b)
# Destructring 됌
2단계: if문
a, b = map(int, input().split())
if a>b :
print('>')
elif a<b :
print('<')
elif a==b :
print('==')
윤년문제
a=int(input())
if (a%400 ==0 or (a%4==0 and a%100!=0)):
print('1')
else:
print('0')
if 조건1 and 조건2 or 조건3 :
h,m = map(int, input().split())
if h==0 and m<45:
print('23', 15+m)
elif h==0 and m>=45:
print(h, m-45)
elif h>0 and m<45:
print(h-1, 15+m)
elif h>0 and m>=45:
print(h, m-45)
3단계: for문
for i in range(횟수(정수)), i=0부터 시작
# for i in range(변수(X))
N = int(input())
for i in range(N):
for i in range(1, 100) ===>>> i=1~99
N=int(input())
for i in range(1,10):
n=int(input())
for i in range(1,n+1):
a,b=map(int, input().split())
print(a+b)
for 요소 in 변수or배열
for i in str(x):
a.append(int(x))
import sys - input() 실행속도 감축
import sys
input = sys.stdin.readline
// 변수에 저장해야하는 것은 프로퍼티다.
// ...readline() 메소드를 저장하니까 죽어도 안됐다.
n = int(input())
4단계 while문
while True:
a,b = map(int, input().split())
if a==0 and b==0 :
break
print(a+b)
try, except
try에서 오류가 나면 except 블럭이 실행된다.
while True:
try:
a,b = map(int, input().split())
print(a+b)
except:
break
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다. 위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
import sys
input = sys.stdin.readline
N = num = int(input())
count = 0
while True:
fNumber=N//10
uNumber=N%10
total = fNumber + uNumber
N = int(str(uNumber)+str(total%10)) // 문자열 형변환 후 정수로 변환하면 문제 의도대로 가능
print(N)
count+=1
if num== N:
break;
print(count)
후기:
10보다 작다면 0을 붙이고...
- 문장을 코드로 1:1구현하려고 해서 시간이 많이 걸렸다.
핵심 코드를 치면 자연스레 맞춰지는 것들이였다.
- 문제 가독성이 심하게 떨어진다.
독해력과 사고력의 문제일 수 도 있다.
이 기계어 같은 한국어를 제대로 이해하려면 어떻게 해야할까?
-
한국어 보충설명은 참고만 한다.
-
예시를 먼저 보고 패턴을 이미지로 파악한다.
파악한 이미지를 사고력을 통해 수식으로 변환하여 풀이한다.
5단계 1차원 배열
'{ } { } '.format
n = int(input())
list = list(map(int, input().split()))
print('{} {}'.format(min(list), max(list)))
1) 배열.append('a')
2) 배열.index('값')=값의 인덱스
a = []
for i in range(9):
a.append(int(input()))
print(max(a))
print(a.index(max(a))+1)
1) 리스트 = list(str( '123456'))
문자열로 따로따로 저장해서 리스트 생성
2) 리스트.count('a')
리스트 안에 'a'를 카운트
a = int(input())
b = int(input())
c = int(input())
result = list(str(a * b * c))
for i in range(10):
print(result.count(str(i)))
1) 집합 = set( )
2) 집합.add( )
3) 배열.append( )
a=[]
for i in range(10):
n = int(input())
a.append(n % 42)
arr=set(a)
print(len(arr))
a = set()
for i in range(10):
n = int(input())
a.add(n % 42)
print(len(a))
for 요소 in 배열
이게 돼?...
n = int(input())
list = list(map(int, input().split()))
m =max(list)
new = []
for i in list:
new.append(i/m*100)
newAvg = sum(new)/len(new)
print(newAvg)
n = int(input())
for i in range(n):
score = 0
tScore = 0
results = list(input())
for result in results:
if result =='O':
score += 1
tScore += score
else:
score = 0
print(tScore)
for i in scores[1 : ]:
1번 인덱스 부터 for문 돌릴 때
f- string: 문자열 포맷팅 방법
f'문자열 {변수} 문자열'
s = 'coffee'
n = 5
result1 = f'저는 {s}를 좋아합니다. 하루 {n}잔 마셔요.'
print(result1)
print( f'{ ratio:.3f }%')
.3f: 소숫점 세자리 까지 표기
ratio:.3f => ratio변수를 .3f로 표기하라
c = int(input())
for i in range(c):
scores = list(map(int, input().split()))
avg = sum(scores[1:])/scores[0]
ratio = 0
for i in scores[1:]:
if i >avg:
ratio += 1
ratio = ratio/scores[0] * 100
print(f'{ratio:.3f}%')
6단계: 함수
def solve(a):
ans = sum(a)
return ans
셀프넘버 개수 세기
def func(n):
sum = 0
for x in list(str(n)):
sum = sum + int(x);
return n+sum;
c=[]
for n in range(1,10001):
c.append(func(n))
for d in range(1,10001):
if d in c: //1-10000에서 해당하는 숫자는 패스해서 여집합 효과내기
pass
else:
print(d)
한수 개수 세기
n = int(input())
a = []
sum = 99
if n< 100:
sum = n;
else:
index = 100
while index != n+1:
// 210이 n으로 들어왔을때, 210도 비교해서 넣어야하기 때문에 n+1로 기준으로 잡음
for b in str(index):
a.append(int(b)) //자릿수를 따로따로 저장, 모듈로 흡수하기
if a[1] - a[0] == a[2] - a[1]:
sum += 1
index +=1
a = []
print(sum)
7단계
ord( a) = 97 / chr( 122 ) = z
s= input()
a = []
index = 0
check = False
for i in s:
a.append(ord(i))
for j in range(97,123):
for k in a:
if j == k:
check = True;
print(index,end=' ')
break;
else:
index = index + 1
if check != True:
print("-1",end=' ')
else:
check = False
index = 0
find( ):
-
문자열에서만 사용 가능
-
문자가 문자열 안에 포함되지 않은 경우 -1을 출력
index():
-
문자열, 리스트, 튜플과 같은 반복 가능한 iterable 자료형에서도 찾는 문자의 인덱스를 반환
-
문자가 문자열 안에 포함되지 않은 경우 AttributeError가 발생한다.
word = input()
alphabet = list(range(97,123))
for x in alphabet :
print(word.find(chr(x)))
n = int(input())
for i in range(n):
cnt, word = input().split()
for x in word:
print(x*int(cnt), end='')
print()
가장 많이 언급된 단어 출력
word = input().upper()
setWord = list(set(word))
cntList = []
for x in setWord :
cnt = word.count(x)
cntList.append(cnt)
if cntList.count(max(cntList))>1:
print('?')
else:
print(setWord[cntList.index(max(cntList))])
주의
setWord = list(set(word))의 결과
Mississipi
['P', 'M', 'S', 'I']
set함수가 차례대로 인덱스가 저장되질 않으니, setWord[인덱스]를 사용해야한다.
1152번: 단어의 개수
s = input().split(' ')
a = []
for i in s:
if i !='':
a.append(i)
print(len(a))
다른 정답 코딩예시를 봤는데 오점투성이다.
띄어쓰기 및 기호까지 단어로 인식한다.
그냥 기초로 생각하고 넘어가자.
arr [0,1,2,3,4,5,6,7,8,9]
arr[::2]
# 처음부터 끝까지 두 칸 간격으로
[0,2,4,6,8]
arr[1::2]
# index 1 부터 끝까지 두 칸 간격으로
[1,3,5,7,9]
arr[::-1]
# 처음부터 끝까지 -1칸 간격으로 ( == 역순으로)
[9,8,7,6,5,4,3,2,1,0]
arr[::-2]
# 처음부터 끝까지 -2칸 간격으로 ( == 역순, 두 칸 간격으로)
[9,7,5,3,1]
arr[3::-1]
# index 3 부터 끝까지 -1칸 간격으로 ( == 역순으로)
[3,2,1,0]
arr[1:6:2]
# index 1 부터 index 6 까지 두 칸 간격으로
[1,3,5]
번외
1. 할당조건문
num = num /2 if num % 2 == 0 else num \* 3 + 1
2. reverse vs reversed
num = 1234
list(map(int, str(num)))
list(map(int, reversed((str(n)))))
# list(map(int, reversed(list(str(n)))))
- `map(타입, 이터러블)`에서 이터러블에 `str`도 올 수 있다.
- `array.reverse()`: 리스트 반환 X, 원본만 변형
- `reversed(이터러블)`: 리스트 반환 O
3. ''.join(li)
def solution(n):
li = sorted(map(int,list(str(n))),reverse=True)
str_li = ''.join(li)
return str_li
- 숫자만 있는 Array에 `''.join(Array)` 를 하면 숫자가 나오지 않는다.
- 문자로 바꿔서 처리해줘야한다. `''.join(map(int,Array))`