Python/BaekJoon

[Baekjoon] Baekjoon 작성 시 팁, 주의사항, 자주 틀리는 것

kyra 2022. 10. 5. 22:15

✨내가 공부하기 위한 기록!

 

✔작성 방법

 

1. 시작 부분에 빠르게 입력을 받을 수 있는 코드 작성

import sys
input = sys.stdin.readline

 

2. 값 입력받기

  1) 여러 숫자를 받을 때

a, b, c = map(int, input().split())

 

  2) 주어지는 입력값을 리스트에 담아 받을 때

a = list(map, int(input().split()))

 

 3) 문자열 입력 받을 때

a = input().rstrip()

 

 4) 문자열 여러 줄 입력받을 때 (1)

* input() for _ in range(n)

# ABCDE
# BCDEF
# FABCE 

str = [input() for _ in range(3)]

# str[0] = ABCDE, str[1] = BCDEF, str[2] = FABCE

 

5) 2차원 배열을 입력받기

# 1 2 3 4 5
# 6 7 8 9 0
# 5 4 3 2 1

arr = [list(map, int().split()) for _ in range (3)]

# arr[0][0] = 1, arr[0][1] = 2, arr[0][2] = 3, arr[0][3] = 4, arr[0][4] = 5 
# arr[1][0] = 6, arr[1][1] = 7, arr[1][2] = 8, arr[1][3] = 9, arr[1][4] = 0 
# arr[2][0] = 5, arr[2][1] = 4, arr[2][2] = 3, arr[2][3] = 2, arr[2][4] = 1

 

3. if 사용할 때는 조건에 맞지 않아 break를 주어야 할 때를 먼저 작성하면 편하다.

while True:
    a, b = map(int, input().split())
    if a == 0 or b == 0:
        break  #먼저 해당되지 않는 부분을 작성
        
    if b % a == 0:
        print("multiple")
    elif a % b == 0:
        print("factor")
    else:
        print("neither")

 

4. for 문 거꾸로 반복하는 방법

for i in range(n, 0, -1):  #n부터 0까지 1씩 감소함

 

5. 십의 자리, 일의 자리를 따로 뽑는 방법

n = int(input())
t = n #입력 값을 그대로 변수로 쓰기 보다는 새로운 변수로 지정한 뒤 코드 작성

a = t // 10 #a는 십의 자리 숫자
b = t % 10  #b는 일의 자리 숫자

 

6. 아스키 코드 변환 (ord(), chr() 사용)

a = input().rstrip()
print(ord(a)) #문자 입력시 아스키코드 숫자 출력

b = int(input())
print(chr(b)) #숫자 입력시 문자 출력

 

7. ascii_lowercase로 'abced...xyz'까지 이어지는 문자열을 가져옴

import string

for x instring.ascii_lowercase:
    print(x, end = ' ')
    
#a b c d e f g h i j k l m n o p q r s t u v w x y z  출력

 

8. 문자열, 리스트 내 원소 개수 찾기 (count)

a = 'hello'
for x in 'aeiou':
    print(a.count(x))

#출력
0 #a 0개
1 #e 1개
0 #i 0개
1 #o
0 #u


9. 리스트 안 일정한 숫자 넣기

# 1번 
a = [x for x in range(n)]

# 2번
a = list(range(n))

 

10. 2차원 리스트 만들기

 

a = [[0]*10 for i in range(10)]
print(a)

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

 

11. 리스트 내 원소 출력하기

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

print(*a)

 

12. 딕셔너리 사용 시 편리한 작업

처음에 x라는 key가 있으면 +1, key가 없다면 key생성 후 값+1을 if절 사용하지 않아도 되는 패키지

import collections
d = collections.defaultdict(int)

✔자주 틀리는 것

1. or, and 사용할 때

if a == 0 or b == 0 #이렇게 변수 각각 조건을 적어 사용해야 맞다.
if a or b == 0  #이렇게 한꺼번에는 사용할 수 없다.

 

2. 다른 자료형끼리는 더할 수 없다.

a = int(input())

for j in range(1, 10):
    print(a + '*' + j + "=" + a*j)  #여기서 a, j는 정수, 나머지는 문자열이므로 같이 더할 수 없다.
    print(a, '*', j, '=', a*j) 로 작성해야 한다.

 

3. 출력 시 한 줄에 모두 함께 출력할 때 vs 한 줄에 하나씩 출력할 때

print(i, end=" ")  #end = " " 사용하면 끝에는 한 칸씩 띄어 출력한다.
print(*a, sep = '\n') ## \n 은 줄바꿈 명령어

 

4. 문자열 거꾸로 읽어오기 [ : : -1]

a = 'Python'
print(a[::-1])

#'nohtyP' 출력

 

5. 문자열도 인덱싱 가능하다

x = 'apple'
print(x[0])

# a 출력
 
6. 문자열은 immutable이다. 즉 문자열 개개인을 하나씩 바꿀 수 없다. 예를 들어 문자열 내에서 소문자는 대문자로, 대문자는 소문자로 바꾸고 싶은 경우, 새로운 문자열에 바뀐 것을 추가하는 식으로 들어가야 한다.
 
 
a = input().rstrip()
result = ""

for i in a:
    if i.isupper():
        result += i.lower()
    else:
        result += i.upper()

print(result)
## 잘못 된 코드

a = input().rstrip()

for i in a:
    if i.isupper() == False:
        i = i.upper()
    elif i.isupper() == True:
        i = i.lower()

print(a)

ㄷㄷ