[BOJ / 백준] 2422번 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 파이썬(Python) 문제 풀이

2021. 8. 1. 22:38·Baekjoon
728x90

 

문제

 

문제 링크 : https://www.acmicpc.net/problem/2422

 

2422번: 한윤정이 이탈리아에 가서 아이스크림을 사먹는데

첫째 줄에 정수 N과 M이 주어진다. N은 아이스크림 종류의 수이고, M은 섞어먹으면 안 되는 조합의 개수이다. 아래 M개의 줄에는 섞어먹으면 안 되는 조합의 번호가 주어진다. 같은 조합은 두 번

www.acmicpc.net

 

 

 

 

 

CODE

import sys

input = sys.stdin.readline

n, m = map(int, input().split())
ice = [[False for _ in range(n)] for _ in range(n)]
for i in range(m):
    i1, i2 = map(int, input().split())
    ice[i1 - 1][i2 - 1] = True
    ice[i2 - 1][i1 - 1] = True

result = 0

for i in range(n):
    for j in range(i + 1, n):
        for k in range(j + 1, n):
            if not ice[i][j] and not ice[i][k] and not ice[j][k]:
                result += 1

print(result)

 

 

 

 

 

풀이

💡 idea 

- 각 아이스크림 종류 별로 섞어먹으면 안 되는 조합의 번호를 저장

- [브루트 포스] 모든 조합에 대해 섞어먹으면 안 되는 조합인지 검사한다

 

 

💡 implementation

- (초기) 조건문에 in을 사용한 경우 : 시간이 5배 이상 걸린다 🤦

for i in range(n - 2):
    for j in range(i + 1, n - 1):
        for k in range(j + 1, n):
            if j not in ice[i] and k not in ice[i] and k not in ice[j]:
                result += 1

    ˙ ice에도 n번 아이스크림에 섞어먹으면 안 되는 조합의 번호를 리스트로 저장

    ˙ in 연산이 리스트 전체를 순회하기 때문에 시간이 오래 걸린다  →  ice를 boolean 값 가진 이중리스트로 수정

for i in range(n):
    for j in range(i + 1, n):
        for k in range(j + 1, n):
            if not ice[i][j] and not ice[i][k] and not ice[j][k]:
                result += 1

 

- 조합을 생성할 때, itertools의 combinations를 사용할 수도 있다

for i in combinations(range(n), 3):
    if ice[i[0]][i[1]] or ice[i[0]][i[2]] or ice[i[1]][i[2]]:
        continue
    result += 1

    ˙ 코드는 간편해지지만, 시간이 584ms로 조금 느려진다!

 

 

 

 

 

결과

 

 

 

 

 

 

 

728x90
저작자표시 비영리 (새창열림)

'Baekjoon' 카테고리의 다른 글

[BOJ / 백준] 17088번 등차수열 변환 파이썬(Python) 문제 풀이  (0) 2021.08.03
[BOJ / 백준] 17089번 세 친구 성공 파이썬(Python) 문제 풀이  (0) 2021.08.02
[BOJ / 백준] 2210번 숫자판 점프 파이썬(Python) 문제 풀이  (0) 2021.08.01
[BOJ / 백준] 15686번 치킨 배달 파이썬(Python) 문제 풀이  (1) 2021.08.01
[BOJ / 백준] 17088번 등차수열 변환 파이썬(Python) 문제 풀이  (0) 2021.07.31
'Baekjoon' 카테고리의 다른 글
  • [BOJ / 백준] 17088번 등차수열 변환 파이썬(Python) 문제 풀이
  • [BOJ / 백준] 17089번 세 친구 성공 파이썬(Python) 문제 풀이
  • [BOJ / 백준] 2210번 숫자판 점프 파이썬(Python) 문제 풀이
  • [BOJ / 백준] 15686번 치킨 배달 파이썬(Python) 문제 풀이
s_ih_yun
s_ih_yun
  • s_ih_yun
    CODESYUN
    s_ih_yun
  • 전체
    오늘
    어제
    • 분류 전체보기 (339)
      • Web (8)
      • Java (7)
      • Spring (19)
      • Git (16)
      • MyBatis (1)
      • HTML & CSS (14)
      • JavaScript (11)
      • DevOps (4)
      • Cloud (8)
      • Lanuage (13)
        • C++ (3)
        • Python (10)
      • DB (1)
        • MySQL (1)
        • Oracle (2)
      • Computer Science (26)
        • Concept (3)
        • Algorithm (23)
      • Baekjoon (104)
        • 단계별로 풀어보기 (78)
      • CodeUp (98)
        • Python 기초 100제 (98)
      • Programmers (2)
      • Books (3)
      • etc (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Syun's Pages
  • 인기 글

  • 태그

    myBatis
    spring
    자료구조
    oracle
    Python
    단계별로 풀어보기
    c++
    C
    SourceTree
    BOJ
    CSS
    web
    알고리즘
    VS Code
    java
    codeup
    CodeUp 기초 100제
    HTML
    JavaScript
    git
    MySQL
    db
    clean code
    aws
    Cloud
    github
    Tistory
    Programmers
    웹
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
s_ih_yun
[BOJ / 백준] 2422번 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 파이썬(Python) 문제 풀이
상단으로

티스토리툴바