- 문제
- 코드
n = int(input())
a = []
for i in range(n):
word = input()
# 중복된 단어가 아닐 경우에만 리스트에 추가
if word not in [w[0] for w in a]: # 리스트의 첫 번째 요소를 기준으로 확인
a.append((word, len(word)))
# 길이로 정렬하고, 길이가 같으면 단어의 사전 순서로 정렬
a.sort(key=lambda x: (x[1], x[0]))
# 결과 출력
for i in range(len(a)):
print(a[i][0])
- 설명 및 개념
💡 a.sort( key= lambda x : ( x[1], x[0] )) : 다음을 통해서 튜플 값을 가지는 a 리스트를 두번째 값을 기준으로 오름차순 정리한다 . 그런데 값이 같은 경우는 첫번째 값을 기준으로 정렬한다
💡 if word not in [ w[0] for w in a ]: : 다음을 통해서 a리스트의
- 그 외의 알아두면 좋은 개념
💡 sorted(list)
- 리스트 뿐만 아니라 모든 반복 가능한 객체를 정렬할 수 있다.
- 새로운 정렬된 리스트를 반환한다. 즉, 원래의 리스트는 변경되지 않고, 정렬된 복사본을 반환한다
- 사용법 : sorted(iterable, key=None, reverse=False)
- reverserk True인 경우 내림차순으로 정렬한다
💡 list.sort()
- 리스트에서만 사용할 수 있는 메소드
💡 sys.stdin.read : 전체입력을 한꺼번에 읽는다
💡 sys.stdin.readline : 입력을 줄 단위로 처리한다 , 한 줄 씩 처리하거나 반복문을 통해 입력 받는다

- 문제 - 1
- 코드
import sys
def fineone(n):
ex=1%n
lg=1
while ex!=0:
ex = (ex*10+1)%n
lg+=1
return lg
for line in sys.stdin:
n= int(line.strip())
print(fineone(n))
- 설명 및 개념
💡 나머지 연산
- (A+B)%C = (A%C + B%C)%C

💡 for line in sys.stdin: 입력을 줄 단위로 처리하는 방법 , 여러 개의 테스트 케이스를 한꺼번에 입력할 수 있고 입력이 끝날 때 까지 각 줄을 처리할 수 있다
- sys.stdin은 여러 줄의 입력을 받을 때 사용되며, for line in sys.stdin은 입력이 끝날 때까지 각 줄을 line 변수로 받아 처리한다.
💡 line.strip() : 입력받은 줄에는 보통 줄바꿈 문자가 포함되어있다. strip()은 줄의 양끝에서 불필요한 공백을 제거한다
- 문제 - 약수
https://www.acmicpc.net/problem/1037
- 코드
n=int(input())
a=list(map(int,input().split()))
print(min(a)*max(a))
- 설명 및 개념
💡 약수
- n이라는 수의 약수는 루트 n을 기준으로 약수를 곱하면 n이 나온다. 따라서 진짜 약수의 가장작은 수와 가장 큰수를 곱하면 그 수 가 나온다
- 문제 - 약수의합2
https://www.acmicpc.net/problem/17427
- 코드
n=int(input())
cnt=0
for i in range(1,n):
cnt+=i*(n//i)
print(cnt)
- 설명
💡 a라는 약수의 배수들은 모두 a를 약수로 가지는 수 라는 것을 이용한다
- N이하의 자연수 중에서 1을 약수로 갖는 수의 개수는 N//1개
- N이하의 자연수 중에서 2을 약수로 갖는 수의 개수는 N//2개
- 문제 - 약수의 합
https://www.acmicpc.net/problem/17425
- 코드
MAX=1000000
d=[1]*(MAX+1)
s=[0]*(MAX+1)
##d[i] = i의 약수들의 합
##g(n), 즉 약수들의 합의 누적합을 저장하는 배열
for i in range(2,MAX+1):
j=1
while i*j<=MAX:
d[i*j] += i
j+=1
## i의 배수인 i*j는 모두 i를 약수로 가지고 있다는 점을 활용, 따라서
##d[i*j]에 i를 추가한다
for i in range(1, MAX+1):
s[i] = s[i-1] + d[i]
## 약수의 합을 s에 누적한다
t=int(input())
res=[]
for _ in range(t):
n=int(input())
res.append(s[n])
print('\n'.join(map(str,res))+'\n')
- 설명
- g[n]을 미리 다 구해놓는 방식으로 풀었다
- 약수의 합을 구해서 넣는 방식이 아닌 i의 배수인 i*j는 모두 i를 약수로 가지는 수 라는 것을 이용하여 풀었다
'코딩테스트' 카테고리의 다른 글
코테 스터디 22번째 TIL : 시간복잡도 , 완전탐색 문제 풀이 (0) | 2024.09.24 |
---|---|
코테 스터디 21번째 TIL : 문제 풀이 (0) | 2024.09.23 |
코테 스터디 20번째 TIL : 문제 풀이 (1) | 2024.09.18 |
코테 스터디 19번째 TIL : 시뮬레이션 dx,dy 문제 풀이 (1) | 2024.09.11 |
코테 스터디 18번째 TIL : 탐색, 시뮬레이션 문제 풀이 (0) | 2024.09.05 |