[코딩 테스트] 2일차.

Hayoon·2022년 6월 28일
0

1일 5문제로 계획을 세웠으나 쉽지가 않다. 빨리 BFS/DFS의 문을 두드리고 싶다!
문제를 풀면서 새롭게 알게 된 내용을 정리하였다.

뒤집은 소수

23 45 67 이 입력되었을 때 해당 값을 32 54 76으로 바꾸어 소수여부 판별.

for i in reversed(str(x)):
	tmp += i
    return int(tmp)
    ...

정수 x를 문자열로 바꾸고 reversed(str(x))를 통해 배열을 뒤에서 앞으로 반복한다.
문자열을 +로 합친 후 int(tmp)로 ('3' + '2' => 32)로 정수형으로 바꾼다.
소수판별 여부는 다음과 같다.

for i in range(2, x//2 + 1):
	....

2 ~ x까지 범위를 설정하지 않고 x//2 + 1 까지로 범위구간을 설정하여 계산.

소수(에라토스테네스 체)

#max = 214700000
cnt = 0
prime_num = [0] * 2000001 #N <= 200000라서
for i in range(2, N + 1):
	if prime_num[i] == 0:
    	cnt += 1
    	for j in range(i+i, N + 1, i):
        	prime_num[j] = 1

현재 위치의 인덱스 값이 0일 경우, 2를 제외한 2의 배수를 제거한다. 3을 제외한 3의 배수를 제거한다.
4의 배수는 지울 필요 없다.(2의 배수에서 이미 지워졌다.) 그러면 2, 3 다음으로 남아있는 가장 작은 소수, 즉 5를 제외한 5의 배수를 제거해야 한다. ... N의 배수도 마찬가지로 진행한다.
여기서 주목할 점은 range(a, b, c)에서 c는 해당 반복문의 step을 의미 a는 c만큼 이동(a+c)

주사위 게임

항 3개를 동시에 구분할 수 있다.

for i in range(N):
    dice = list(map(int, input().split()))
    if dice[0] == dice[1] == dice[2]: # -----1
		print(1)
    elif dice[0] != dice[1] != dice[2]: # -----2
		print(2)
    else:
    	...

if문에서 a == b == c 일 경우 a,b,c 세 개의 값이 모두 동일함을 의미.
elif문에서 a != b != c 일 경우 a,b,c 세 개의 값이 모두 다름을 의미.
파이썬은 세 개의 항을 동시에 한 줄로 가능하다니 좋다...

profile
Junior Developer

0개의 댓글