<코드설명>

- 시간 초과 코드

import sys

n=int(input())
card=list(map(int, sys.stdin.readline().split()))
m=int(input())
chk=list(map(int, sys.stdin.readline().split()))

for i in chk:
    if i in card:
        print("1", end=' ')
    else:
        print("0", end=' ')

실행은 제대로 되었지만, 시간 초과라는 결과가 나왔다.

따라서 아래와 같은 코드로 바꿔주었다.

 

- 실행 코드

import sys
n=int(input())
card= set(map(int,sys.stdin.readline().split()))
m=int(input())
chk=list(map(int, sys.stdin.readline().split()))

for i in chk:
    if i in card:
        print("1", end=' ')
    else:
        print("0", end=' ')

상근이가 가지고 있는 숫자 카드 개수인 n을 입력받고, 그 카드에 적혀있는 숫자를 card에 받아주었다. 이때, set을 이용하여 시간복잡도를 줄일 수 있도록 하였다. 또, 확인할 숫자카드의 개수인 m을 입력받고 그 카드에 적혀있는 숫자를 chk에 받아주었다. 

chk에 저장된 수를 하나씩 살펴보기 위해 for문을 사용하였고, card에 그 숫자가 포함되어 있다면 1을 출력하도록 하였다. 그리고 그렇지 않은 경우, 0을 출력하도록 하였다.

 

 

<실행결과>

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

[BOJ] 1302 베스트셀러  (0) 2022.09.11
[BOJ] 7785 회사에 있는 사람  (0) 2022.09.11
[BOJ] 1235 학생 번호  (0) 2022.07.03
[BOJ] 1316 그룹 단어 체커  (0) 2022.06.26
[BOJ] 2108 통계학  (0) 2022.06.25

n=int(input())
arr=[]
for _ in range(n):
    arr.append(input())
for i in range(1, len(arr[0])+1):
    back=[]
    for j in range(n):
        if arr[j][-i:] not in back:
            back.append(arr[j][-i:])
        else:break
    if len(back)==n:
        print(i)
        break

<코드 설명>

학생 수 n을 입력받고 그만큼 학생 번호를 for문을 이용하여 arr라는 list에 입력받는다. 

학생 번호의 길이가 모두 같기 때문에, arr[0]의 길이를 기준으로 1부터 len(arr[0])+1까지 반복해주었다. n명의 학생들의 번호를 모두 확인해주기 위해 n만큼 for문을 돌려주었다. arr[j][-i:]가 back에 없으면 추가해주었고 있다면, 구별할 수 없는 것이기 때문에 break해주었다. 

back의 길이가 n과 동일해지면 i를 출력해주고 break해준다.

 

<실행 결과>

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

[BOJ] 7785 회사에 있는 사람  (0) 2022.09.11
[BOJ] 10815 숫자 카드  (0) 2022.09.10
[BOJ] 1316 그룹 단어 체커  (0) 2022.06.26
[BOJ] 2108 통계학  (0) 2022.06.25
[BOJ] 1978 소수 찾기  (0) 2022.06.25

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

+ Recent posts