tc=int(input())
for _ in range(tc):
    n=int(input())
    k1=list(input().split())
    k2=list(input().split())
    p=list(input().split())

    s = []
    for i in k1:
        s.append(k2.index(i))
    
    arr = []
    for i in s:
        arr.append(p[i])
    
    result = ""
    for s in arr:
        result += s + " "
    print(result.strip())

<코드 설명>

testcase를 먼저 입력받아주었다.

tc만큼 for문으로 반복시켜 한 문장의 단어 수인 n, 제 1 공개키인 k1, 제 2 공개키인 k2, 암호문인 p를 입력받아주었다.

k2에서의 k1 원소인 i의 인덱스를 s에 추가해주었다. 이렇게 k2의 암호화 방식을 저장하였다.

저장된 s의 원소인 i를 이용해 arr에 p[i]를 추가해주었다. k2의 암호화 방식대로 p를 저장해주는 것이다.

그리고 이 리스트를 문자열로 바꾸어 출력해주었다.

 

<실행결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1065 한수  (0) 2022.10.09
[BOJ] 2776 암기왕  (0) 2022.10.09
[BOJ] 1463 1로 만들기  (0) 2022.10.02
[BOJ] 2910 빈도 정렬  (0) 2022.10.02
[BOJ] 25325 학생 인기도 측정  (0) 2022.10.02

n=int(input())
d=[0]*1000001
for i in range(2, n+1):
    d[i] = d[i-1] + 1
    if i%2==0:
        d[i]=min(d[i], d[i//2]+1)
    if i%3==0:
        d[i]=min(d[i], d[i//3]+1)
print(d[n])

<코드설명>

먼저 n을 입력받아주었다. 

for문을 이용하여 2부터 n까지 반복시켜주었다. 

1을 빼줬을 때 횟수 추가를 하기 위해 d[i]=d[i-1]+1을 해주었다.

i가 2로 나눠 떨어질 경우, 원래 수인 d[i]와 d[i//2]+1의 값을 비교하여 더 작은 값을 d에 넣어주었다.  +1은 횟수를 추가해주기 위함이다.

i가 3으로 나눠 떨어질 경우, 원래 수인 d[i]와 d[i//3]+1의 값을 비교하여 더 작은 값을 d에 넣어주었다.  마찬가지로 +1은 횟수를 추가해주기 위함이다. 

이렇게 구한 d[n]을 출력해주었다.

 

 

<실행결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 2776 암기왕  (0) 2022.10.09
[BOJ] 9322 철벽 보안 알고리즘  (0) 2022.10.09
[BOJ] 2910 빈도 정렬  (0) 2022.10.02
[BOJ] 25325 학생 인기도 측정  (0) 2022.10.02
[BOJ] 1912 연속합  (0) 2022.09.25

N, C=list(map(int,input().split()))
arr=list(map(int,input().split()))
li={}
j=1
for i in arr:
    if i in li:
        li[i][0] += 1
    else:
        li[i]=[1,j]
        j+=1

li=sorted(li.items(), key=lambda x:(-x[1][0], x[1][1]))

res=[]
for i in li:
    for j in range(i[1][0]):
        res.append(str(i[0]))
print(" ".join(res))

<코드설명>

메시지 길이인 N과 입력받을 숫자의 범위인 C를 입력받았다. 그리고 arr에 수열을 입력받아주었다.

arr의 원소 i를 하나씩 확인하며, i가 li에 아직 없다면 li[i]=[1,j]를 저장해주었다. 이는 입력받은 순서를 확인해주기 위함이며, 해당 수가 처음 입력되었기 때문에 1의 값을 저장해준 것이다. 그리고 입력받은 수인 j를 1 증가시켜주어 모든 수의 입력받은 순서를 확인할 수 있도록 하였다. i가 li에 있다면 li[i][0]값을 1 증가시켜주었다.

그리고 li를 lambda 정렬을 해주었다.이렇게 구한 li를 출력형식과 동일하게 res에 저장하여 출력해주었다.

 

 

<실행결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 9322 철벽 보안 알고리즘  (0) 2022.10.09
[BOJ] 1463 1로 만들기  (0) 2022.10.02
[BOJ] 25325 학생 인기도 측정  (0) 2022.10.02
[BOJ] 1912 연속합  (0) 2022.09.25
[BOJ] 3986 좋은 단어  (0) 2022.09.25

n=int(input())
stu=input().split()
dic={}
for i in stu:
    dic[i]=0
for _ in stu:
    pop=list(map(str,input().split()))
    for i in stu:
        for j in pop:
            if(i==j):
                dic[i]+=1

dic = sorted(dic.items(), key=lambda item:(-item[1],item[0]))

for i in range(n):
    print(dic[i][0], dic[i][1])

<코드설명>

학생 이름의 개수인 n과 학생 이름인 stu를 입력받아주었다.

입력받은 stu를 모두 dic에 저장해주고, 0의 값을 넣어주었다.

stu만큼 한 명의 학생이 좋아하는학생 이름을 pop 변수를 통해 입력받아주었다.

stu와 pop을 이중 for문을 이용하여 둘이 일치할 때마다 dic[i]을 1씩 증가시켜주었다.

정렬하여 출력을 해야하기 때문에 lambda 정렬을 해주었다.

이렇게 구한 dic의 원소를 출력해주었다.

 

 

<실행결과>

 

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1463 1로 만들기  (0) 2022.10.02
[BOJ] 2910 빈도 정렬  (0) 2022.10.02
[BOJ] 1912 연속합  (0) 2022.09.25
[BOJ] 3986 좋은 단어  (0) 2022.09.25
[BOJ] 22233 가희와 키워드  (0) 2022.09.24

+ Recent posts