• 티스토리 홈
  • 프로필사진
    2료일
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
2료일
  • 프로필사진
    2료일
    • 분류 전체보기 (118)
      • SWIFT개발 (29)
      • 알고리즘 (25)
      • Design (6)
      • ARkit (1)
      • 면접준비 (32)
      • UIkit (2)
      • Vapor-Server with swift (3)
      • 디자인패턴 (5)
      • 반응형프로그래밍 (12)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 백준2143- python (gold 3)
        2023년 05월 21일
        • 2료일
        • 작성자
        • 2023.05.21.:27

        https://www.acmicpc.net/problem/2143

         

        2143번: 두 배열의 합

        첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그

        www.acmicpc.net

        처음에 n개의 숫자가 나오고 m개의 숫자가 나오는데 거기 있는 것들의 합으로 t를 만드는게 목표이다. 이 문제를 보고 뭔가 동전들로 금액맞추기가 떠올랐다. 

        처음에 Nlist, Mlist를 받으면 거기서 가능한 모든 조합을 정리하고 값들을 dict으로 만들어 주었다. 왜냐하면 시간복잡도가 O(1)이기에 

        for문을 두번돌면서 가능한 부배열들의 합 들을 ndict에 넣어주고 key값이 이미있으면 value를 1증가시켜주었다.

        마지막 answer를 구해주는 코드는 매우 짧다.

        하나씩 ndict의 키값을 돌면서 만약 mkey값과 더한게 t면 answer에 그만큼 더해주는데 해당하는 value들의 곱을 더해준다. 왜냐하면

        만약 키값이 4인 value가 3이라면 이 뜻은 여기안에 1,3. 2,2. 4이런식으로 존재한다는 뜻이기에 각각의 조합을 만들수 있기 때문이다. 

        전체적인 시간복잡도는 ndict를 만들어주는 것에서 O(n2)이 소요된다. 

        t = int(input())
        n = int(input())
        nlist = list(map(int,input().split()))
        m = int(input())
        mlist = list(map(int,input().split()))
        
        ndict  = {}
        mdict = {}
        answer = 0
        for i in range(n):
            for j in range(i+1, n+1):
                tmp = sum(nlist[i:j])
                if tmp in ndict:
                    ndict[tmp] += 1
                else:
                    ndict[tmp] = 1
        
        for i in range(m):
            for j in range(i+1, m +1):
                tmp = sum(mlist[i:j])
                if tmp in mdict:
                    mdict[tmp] += 1
                else:
                    mdict[tmp] = 1
        for nkey in ndict.keys():
            if t-nkey in mdict.keys():
                answer += ndict[nkey] * mdict[t-nkey]
        print(answer)

         

        '알고리즘' 카테고리의 다른 글

        백준 1644- 소수의 연속합(PYTHON)  (1) 2023.05.27
        17142-python풀이  (1) 2023.05.22
        1043-python  (1) 2023.05.11
        [프로그래머스]-이모티콘할인행사(swift)  (0) 2023.05.04
        알고리즘 2023kakaoblind-개인정보 수집 유효기간(python)  (0) 2023.04.30
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바