n=int(input())
cnt=n
for _ in range(n):
    word = input()
    for j in range(len(word)-1):
        if word[j]!=word[j+1]:
            if word[j+1] in word[:j]:
                cnt-=1
                break
print(cnt)

<코드 설명>

입력할 단어의 개수인 n을 입력받고, cnt에 n을 저장해준다.

n만큼 for문으로 반복하며 word를 입력받아준다. word의 문자열을 검사해주기 위해 이중 for문을 사용해준다. 

word의 j번째와 j+1번째 문자열이 다른지 확인해주고 다르다면,j+1번째 word가 word[:j]에 포함되어 있는지 검사를 해준다. 포함되어 있다면 그룹단어가 아니므로 cnt를 감소해준다. 그리고 그 단어는 더이상 검사할 필요가 없으므로 break 해준다.

 

<실행 결과>

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

[BOJ] 10815 숫자 카드  (0) 2022.09.10
[BOJ] 1235 학생 번호  (0) 2022.07.03
[BOJ] 2108 통계학  (0) 2022.06.25
[BOJ] 1978 소수 찾기  (0) 2022.06.25
[BOJ] 1427 소트인사이드  (0) 2022.06.19

class 2

 

- 실패 코드

def avg(arr, n):
    sum=0
    for i in arr:
        sum+=i
    return round(sum/n)

def mid(arr, n):
    arr.sort()
    return arr[n//2]

def max(arr, n):
    li=dict()
    max=0
    cnt=0
    arr.sort()
    for i in range(n):
        if arr[i] not in li:
            li[arr[i]]=1
        else:
            for j in li:
                if j==arr[i]:
                    li[j]+=1
    for i in li:
        if max<li[i]:
            max=li[i]
            max_key=i
    for i in li:
        if li[max_key]==li[i]:
            cnt+=1
    if cnt>1:
        return arr[1]
    else : return max_key

def numrange(arr, n):
    arr.sort()
    cha=arr[-1]-arr[0]
    return cha

n=int(input())
number=[]
for _ in range(n):
    number.append(int(input()))

print(avg(number,n))
print(mid(number,n))
print(max(number,n))
print(numrange(number,n))

실패 이유 : 시간 초과 

 

- 성공 코드

import sys
from collections import Counter

def avg(arr, n):
    return (round(sum(arr)/n))

def mid(arr, n):
    return arr[n//2]

def max(arr, n):
    max = Counter(arr).most_common()
    if len(max) > 1 and max[0][1]==max[1][1]:
        return max[1][0]
    else:
        return max[0][0]

def numrange(arr, n):
    cha=arr[-1]-arr[0]
    return cha

n=int(input())
number=[]
for _ in range(n):
    number.append(int(sys.stdin.readline()))
number.sort()

print(avg(number,n))
print(mid(number,n))
print(max(number,n))
print(numrange(number,n))

<코드 설명>

main : 입력받을 숫자의 개수를 n으로 입력받고 number이라는 list에 n개의 수를 입력받아 추가해주었다. 그리고 이를 sort해주었다.

 

산술 평균 -> avg 함수 : arr의 합을 총 개수인 n으로 나눠준다.

중앙값 -> mid 함수 : arr가 이미 sort 되어 있으므로 n을 2로 나눈 수(중간 index) 번째에 있는 arr 값을 반환한다.

최빈값 -> max 함수 : counter를 사용하여 arr의 최빈값을 구하여 max에 저장해주었다. 최빈값이 2개 이상일때 max[1][0] (두번째로 작은 값)을 가져오고, 그렇지 않으면 max[0][0] (빈도수 높은 값)을 가져온다.

범위 -> numrange 함수 : arr의 마지막 원소와 첫번째 함수의 차이를 반환한다.

 

<실행 결과>

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

[BOJ] 1235 학생 번호  (0) 2022.07.03
[BOJ] 1316 그룹 단어 체커  (0) 2022.06.26
[BOJ] 1978 소수 찾기  (0) 2022.06.25
[BOJ] 1427 소트인사이드  (0) 2022.06.19
[BOJ] 2869 달팽이는 올라가고 싶다  (0) 2022.06.19

class 2

n=int(input())
num=map(int, input().split())
cnt=0
for i in num:
    chk=0
    if i>1:
        for j in range(2,i):
            if i%j==0:
                chk+=1
        if chk==0:
            cnt+=1
print(cnt)

<코드 설명>

입력 받을 숫자의 개수인 n을 입력받는다. 그리고 n개의 숫자를 num에 입력 받았다. cnt값은 0으로 초기화 해주었다.

num 속 숫자들을 하나씩 확인해주기 위해 for문을 사용해주었다.

chk를 0으로 초기화 해주고, i가 1이면 안되기 때문에 1보다 커야 한다는 조건을 주었다.

j를 2-i까지 지정해주며 i가 j로 나눠지는지 확인해주었다. 나눠지면 chk를 1씩 증가해주었다.

chk가 0이면 cnt값을 1추가해주며 소수의 개수를 구해주었다.

 

<실행 결과>

 

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

[BOJ] 1316 그룹 단어 체커  (0) 2022.06.26
[BOJ] 2108 통계학  (0) 2022.06.25
[BOJ] 1427 소트인사이드  (0) 2022.06.19
[BOJ] 2869 달팽이는 올라가고 싶다  (0) 2022.06.19
[BOJ] 10773 제로  (0) 2022.06.19

n=input()
arr=[]
for i in n:
    arr.append(int(i))
arr.sort(reverse=True)

for i in arr:
    print(i, end='')

<코드 설명>

숫자 n을 먼저 입력받는다. 이 때, 굳이 int를 씌울 필요는 없다.

arr라는 배열을 만들어 n을 순서대로 추가해준다.

그리고 arr배열을 reverse로 sort시켜준다. (내림차순)

이렇게 정렬한 arr배열을 순서대로 출력시켜주었다. 한 줄에 모두 출력시켜주기 위해 end=''를 추가해주었다.

 

<실행 결과>

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

[BOJ] 2108 통계학  (0) 2022.06.25
[BOJ] 1978 소수 찾기  (0) 2022.06.25
[BOJ] 2869 달팽이는 올라가고 싶다  (0) 2022.06.19
[BOJ] 10773 제로  (0) 2022.06.19
[BOJ] 1251 단어 나누기  (0) 2022.05.28

+ Recent posts