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

n=int(input())
num=list(map(int, input().split()))
sum=[num[0]]
for i in range(len(num)-1):
    sum.append(max(sum[i]+num[i+1],num[i+1]))
print(max(sum))

<코드설명>

입력받을 정수의 개수를 n으로 입력받아주었다. 그리고 num에 list형식으로 수열을 입력받아주었다.

num의 수열을 for문을 통해 돌면서, sum[i]+num[i+1]이 더 큰 지, 아니면 num[i+1]이 더 큰 지를 비교해주고 더 큰 수를 sum에 append 해주었다. 여기서 sum의 첫번째값을 num의 첫번째 원소인 num[0]을 주었는데, 만약 0을 주면 음수만으로 이루어진 수열에서도 0이 최소값이 되어버리며, 입력받을 수의 최소값인 -1000을 주게된다면 가장 첫번째 원소만 더해주었을 때가 최소값일 때를 고려하지 못한다.

이렇게 구한 sum 중에서 가장 큰 원소값을 출력해주었다.

 

 

<실행결과>

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

[BOJ] 2910 빈도 정렬  (0) 2022.10.02
[BOJ] 25325 학생 인기도 측정  (0) 2022.10.02
[BOJ] 3986 좋은 단어  (0) 2022.09.25
[BOJ] 22233 가희와 키워드  (0) 2022.09.24
[BOJ] 1475 방 번호  (0) 2022.09.18

n=int(input())
cnt=0
for _ in range(n):
    word=input()
    arr=[]
    for i in word:
        if i not in arr:
            arr.append(i)
        else:
            if i == arr[-1]:
                arr.pop()
            else:
                arr.append(i)
    if not arr:
        cnt += 1
print(cnt)

<코드설명>

단어의 수인 n을 먼저 입력받아 주었다. 그리고 n만큼 for문으로 반복시켜 word를 input 받아주었다.

word의 문자를 하나씩 살펴보고, arr에 문자인 i가 없다면 arr에 append하여 추가시켜주었다.

그렇지 않은 경우, i가 arr의 마지막 원소가 같으면 arr를 pop하여 삭제시켜주었다. i가 arr[-1]과 다르면 arr에 i를 append 해주었다.

이렇게 계속해서 pop이 되어 arr에 원소가 남지 않았다면 cnt값을 1 증가시켜주도록 하였다.

좋은 단어의 개수를 출력하기 위해 cnt값을 출력해주었다.

 

 

<실행결과>

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

[BOJ] 25325 학생 인기도 측정  (0) 2022.10.02
[BOJ] 1912 연속합  (0) 2022.09.25
[BOJ] 22233 가희와 키워드  (0) 2022.09.24
[BOJ] 1475 방 번호  (0) 2022.09.18
[BOJ] 4358 생태학  (0) 2022.09.18

+ Recent posts