꿈꿈개
꿈을 좇아 꿈틀꿈틀
꿈꿈개
전체 방문자
오늘
어제
  • 분류 전체보기 (24)
    • 코딩테스트 문제풀이 (16)
    • 일기 (1)
    • AI (0)
      • 논문리뷰 (0)
      • NLP (0)
      • CV (0)
    • 자료구조 (2)
    • 알고리즘 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 일기 #개발자 #퇴사 #인생 #기록 #블로그
  • 개발 #알고리즘 #자료구조

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
꿈꿈개

꿈을 좇아 꿈틀꿈틀

코딩테스트 문제풀이

[이것이 코딩테스트다] 볼링공 고르기

2022. 8. 28. 17:49

문제

볼링공 n개가 있고, 각 볼링공마다 무게가 적혀있으며 공의 번호는 1번부터 순서대로 부여됩니다.

같은 무게의 공이 여러개 있을 수 있지만, 서로 다른 공으로 간주합니다.

 

입력 조건

  • 첫쨰줄에 볼링공의 개수 n, 공의 최대 무게 m이 공백으로 구분되어 각각 자연수 형태로 주어집니다. (1<=n<=1000, 1<=m<=10)
  • 둘째줄에 각 볼링공의무게 k가 공백으로 구분되어 순서대로 자연수 형태로 주어집니다.(1<=k<=m)

출력 조건

첫쨰줄에 두 사람이 볼링공을 고르는 경우의수를 출력

 

예시

5 3

1 3 2 3 2

 

출력 

8

 

해결  방법

같은 무게여도 다른 공으로 취급한다고 했으니 뽑은 볼링공의 무게와 다르기만 하면 뽑는 횟수에 추가한다. 

즉 1 3 2 3 2 일때 1의 무게를 가지는 1번째 볼링공은 2,3,4,5번과 함께 조합이 가능한 것이고,

3의 무게를 가지는 2번 공은 같은 무게인 4번공을 제외한 3번과 5번과 조합이 가능하다.

2의 무게를 가지는 3번 공은 같은 무게인 5번공을 제외한 4번과 조합이 가능하고 4번공은 5번공과 조합이 가능하여 총 8가지로 조합할 수 있는 것이다.

 

무게를 담은 볼링공 리스트를 큐로 변환해서 처음부터 뽑아가며 다른 공들을 하나씩 비교하면서 같은 무게인지 확인하고 다른 무게라면 카운트를 세는 방식으로 문제를 풀었다.

 

코드

from collections import deque

n, m=map(int, input().split())
s=list(map(int, input().split()))


q=deque(s)
cnt=0
while q :
    temp=q.popleft()
    for i in q :
        if i!=temp :
            cnt+=1

print(cnt)

 

<책에서의 풀이>

무게마다 볼링공의 갯수가 몇개인지 확인 후, 특정한 무게의 볼링공을 선택했을 때 차례대로 계산하는 방식을 사용했다.

문제 예시를 들어 설명하면

 

  • 무게가 1인 볼링공 갯수 : 1
  • 무게가 2인 볼링공 갯수 : 2
  • 무게가 3인 볼링공 갯수 : 2

a가 무게가 1인 볼링공을 뽑을때 경우의 수  : 1x4=4

a가 무게가 2인 볼링공을 뽑을때 경우의 수  : 2x2=4

a가 무게가 3인 볼링공을 뽑을때 경우의 수  : 2x0=0

 

볼링공 무게가 10까지로 정해졌으므로 1부터 10까지 담을 수 있는 리스트를 0으로 초기화한 후 볼링공 갯수를 기록한다.

 

코드

n, m=map(int, input().split())
s=list(map(int, input().split()))

#1부터 10까지 무게를 담을 수 있는 리스트
array=[0]*11

#볼링공 무게 기록
for x in s :
    array[x]+=1 

result =0

for i in range(1, m+1) :
    n-=array[i] #무게가 i인 볼링공의 개수 제외
    result+=array[i]*n #b가 선택한 경우의 수와 곱하기

print(result)

※<이것이 취업을 위한 코딩테스트다 (나동빈 저)> 를 참고하여 작성된 게시글입니다.

'코딩테스트 문제풀이' 카테고리의 다른 글

[이것이 코딩테스트다] 럭키 스트레이트  (0) 2022.08.29
[이것이 코딩테스트다] 무지의 먹방라이브  (0) 2022.08.28
[이것이 코딩테스트다] 만들 수 없는 금액  (0) 2022.08.28
[이것이 코딩테스트다] 문자열 뒤집기  (0) 2022.08.28
[이것이 코딩테스트다] 이진탐색 부품찾기  (0) 2022.08.11
    '코딩테스트 문제풀이' 카테고리의 다른 글
    • [이것이 코딩테스트다] 럭키 스트레이트
    • [이것이 코딩테스트다] 무지의 먹방라이브
    • [이것이 코딩테스트다] 만들 수 없는 금액
    • [이것이 코딩테스트다] 문자열 뒤집기
    꿈꿈개
    꿈꿈개
    꿈을 꾸는 개발자의 공부 일지

    티스토리툴바