[Python] [백준 #1026] zip으로 리스트끼리 연산하기

2024. 7. 12. 18:30· Languages/Python
목차
  1. 내장함수 zip

 

 

import sys
input = sys.stdin.readline

N = int(input())
A = []
B = []

A = sorted(list(map(int, input().split())))
B = sorted(list(map(int, input().split())))
B.reverse()


result = [i*j for i, j in zip(A, B)]
total_min = sum(result)

print(total_min)

 

내가 작성한 코드는 이렇다..

(잘 못하니까 참고는 다른 분꺼 .. 하시길 ..)

 

내가 생각한 로직은 이렇다.

두 번째, 세 번째 줄에 각각 정수 배열 A와 B의 값이 스페이스로 구분되어 입력되면

이를 받아 리스트에 저장한다.

 

split()을 이용해서 input()을 스페이스를 기준으로 값을 받아

map으로 각 값들을 정수로 바꾸고

list 안에 넣는다.

 

S의 값을 가장 작게 만들기 위해 A의 수를 재배열해야 하고, 이때 B는 재배열하면 안된다.

예제를 통해 A의 수를 재배열 해보자.

5
1 1 1 6 0
2 7 8 3 1

곱의 전체 합이 최소가 되어야 하므로

1 1 0 1 6

2 7 8 3 1

으로 A의 수를 재배열,

총 합은 1*2 + 1*7 + 0*8 + 1*3 + 6*1 으로 18이다.

 

매치된 숫자들을 잘 보면

규칙을 찾을 수 있다.

A에서 작은 값은 B에서 큰 값으로 매치된다.

 

따라서 나는

A를 오름차순 정렬, B를 내림차순 정렬하고 곱하기로 했다.

 

정렬을 한 뒤 A와 B 리스트의 요소를 순서대로 각각 곱해주어야 한다.

이때 사용한 것이 바로 zip이다.

 

내장함수 zip

zip은 여러 배열을 튜플로 묶어주는 연산을 해준다.

내장함수이므로 따로 import는 필요 없다.

 

a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]

print([i for i in zip(a, b)]

#[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]

 

a, b의 값을 튜플로 묶어준 것을 확인할 수 있다.

 

두 값에 대한 연산을 해보자

a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]

print([i*j for i, j in zip(a, b)]

#[6, 14, 24, 36, 50]

 

이 방법을 이용해서

문제의 A, B의 곱을 구해주면 되겠다!

오름차순 정렬한 A와 내림차순 정렬한 B의 요소들을 곱해서

result에 배열로 저장하고

sum(result)를 통해 각 요소의 전체 합을 구하면 된다.

 

해결 ~!

 

추가적으로 찾아보면서 알게 된 내용

zip() 함수는 iterable(반복 가능한) 자료형의 개수가 동일할 때 사용할 수 있다.

여러 개의 iterable 객체를 인자로 받고, 각 객체가 담고 있는 원소를 튜플의 형태로

차례로 접근할 수 있는 반복자(iterator)를 반환한다.

 

zip() 함수를 2차원 배열에 사용하면 쉽게 row, column을 뒤집을 수 있다.

위에서 언급했듯, 배열 크기가 같아야 하므로 N*N 배열에 적용된다.

 

arrays = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flip_arrays = list(map(list, zip(*arrays)))

print(arrays)
# [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(flip_arrays)
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
for item in zip(*arrays):
	print(item)
# (1, 4, 7)
# (2, 5, 8)
# (3, 6, 9)

'Languages > Python' 카테고리의 다른 글

[Python] leetcode | 2974. Minumum Number Game | array sort  (0) 2024.05.26
[Python] leetcode | 20. Valid Parentheses 괄호 짝 맞추기 | Stack  (0) 2024.05.26
[Python] 프로그래머스 | 같은 숫자는 싫어 | append  (0) 2024.05.24
[Python] [백준 #20291] Counter로 배열 요소 개수 세기  (0) 2024.05.10
[Python] [백준 #1764] 두 개의 set(집합) 중복 요소 출력하기  (0) 2024.05.10
  1. 내장함수 zip
'Languages/Python' 카테고리의 다른 글
  • [Python] leetcode | 2974. Minumum Number Game | array sort
  • [Python] leetcode | 20. Valid Parentheses 괄호 짝 맞추기 | Stack
  • [Python] 프로그래머스 | 같은 숫자는 싫어 | append
  • [Python] [백준 #20291] Counter로 배열 요소 개수 세기
효딩
효딩
개ㄱ발은 기세다. 줄여서 객기.
효딩
hyoding
효딩
전체
오늘
어제
  • 분류 전체보기 (245)
    • SKKU SW (30)
      • Computer Architecture (14)
      • Database (4)
      • Computer Network (3)
      • Operating System (7)
      • Mobile App Programming (2)
    • SuperCoding (68)
    • CS (8)
    • Web Programming (19)
    • Cloud (13)
    • Languages (45)
      • Python (8)
      • Java (37)
    • Supporters (8)
      • MoteMote (6)
      • NHN Cloud (2)
    • Certification (27)
      • Network Advisor (14)
      • ADsP (10)
      • Engineer Information Proces.. (3)
    • Finance (9)
      • 경제금융용어 (3)
    • Woori FISA (14)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • nhn cloud
  • 네트워크관리사 후기
  • 글로벌소프트웨어캠퍼스
  • apppaas
  • 네트워크관리사
  • 우리에프아이에스
  • 서버개발
  • rds local 접속
  • 네트워크관리사2급 필기
  • 네트워크관리사2급
  • 네트워크관리사 준비물
  • 클라우드
  • Kotlin
  • AWS
  • 봐
  • 네트워크관리사 합격
  • 인프라개발
  • 인프라
  • 우리FISA
  • 코틀린
  • 코틀린문법
  • 클라우드 서비스
  • 서버배포
  • 우리fis아카데미
  • 네트워크관리사2급 공부방법
  • 앱개발
  • 서버생성
  • K-디지털트레이닝
  • 클라우드서비스개발
  • 네트워크관리사 커트라인

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
효딩
[Python] [백준 #1026] zip으로 리스트끼리 연산하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.