Learn to share,Share to learn

join함수 이해 본문

알고리즘

join함수 이해

Rogue One 2024. 1. 26. 17:17

 

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

 

10610번: 30

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한

www.acmicpc.net

 

브레인스토밍

N = input()
sum = 0
for i in range(int(N)):
  sum += int(N[i])
if (sum % 3 == 0):

  #3의배수 순서대로 비교후 break
else:
  print(-1)

 

3의 배수가 아니라 30의 배수인데 잘못작성했다.

 

실제 코드

N = input()

# 3의 배수 확인을 위한 합계 계산
sum_of_digits = sum(int(digit) for digit in N)

# 0의 포함 여부와 3의 배수 조건 확인
if '0' in N and sum_of_digits % 3 == 0:
    # 숫자들을 내림차순으로 정렬
    result = ''.join(sorted(N, reverse=True))
    print(result)
else:
    print(-1)

 

여기서 join 함수에 대하여 잘 모르고있었다. 문자열이나 리스트에서 저걸 이용하면 하나로 연결시킬수 있다.. 정도. 예를들어, ''.join을 통해 [A,B,C]를 ABC로 묶을수 있다? 이렇게만 간단하게 알고있었는데 이번기회에 공부했다.

 

Python의 join() 함수 이해하기

Python에서 문자열을 다룰 때 자주 사용되는 함수 중 하나는 join() 함수입니다. 이 함수는 여러 개의 문자열을 하나의 문자열로 결합하는 데 사용됩니다. join() 함수는 문자열, 리스트, 튜플 등 이터러블(iterable) 객체에 포함된 문자열 요소들을 결합할 수 있습니다.

join() 함수의 기본 구조

join() 함수는 다음과 같은 형식으로 사용됩니다:

'구분자'.join(이터러블)

여기서 '구분자'는 결합할 문자열 사이에 삽입될 문자열입니다. '이터러블'은 결합할 문자열의 시퀀스(리스트, 튜플, 문자열 등)입니다.

이터러블(Iterable)이란?

이터러블은 멤버를 하나씩 차례대로 접근할 수 있는 모든 객체를 의미합니다. Python의 리스트, 튜플, 세트, 딕셔너리, 문자열 등이 이에 해당합니다. 각 요소가 연속적으로 이어져 있으며, for 루프 등을 통해 이 요소들을 순회할 수 있습니다.

join() 함수 사용 예시

예를 들어, 아래와 같은 리스트가 있을 때 이 리스트의 모든 요소를 쉼표와 공백으로 구분하여 하나의 문자열로 결합하려면 다음과 같이 join() 함수를 사용할 수 있습니다:

words = ["apple", "banana", "cherry"]
result = ", ".join(words)
print(result)  # 출력: apple, banana, cherry

문자열도 이터러블

문자열도 Python에서는 이터러블로 간주됩니다. 따라서 문자열에 join() 함수를 사용할 수 있습니다. 문자열을 이터러블로 취급하면, 각 문자가 시퀀스의 요소가 됩니다.

join() 함수를 사용한 문제 해결 예시

문제: 어느 날, 미르코는 길거리에서 양수 N을 보았습니다. 미르코는 숫자들을 섞어 3의 배수가 되는 가장 큰 수를 만들고 싶어합니다.

해결 방법:

  1. N의 각 숫자들의 합이 3의 배수인지 확인합니다.
  2. 3의 배수 조건을 만족한다면, 숫자들을 내림차순으로 정렬하여 가장 큰 수를 만듭니다.
  3. 3의 배수 조건을 만족하지 않으면, 3의 배수를 만들 수 없으므로 -1을 출력합니다.
N = "21124832"  # 예시 입력

# 3의 배수 확인을 위한 합계 계산
sum_of_digits = sum(int(digit) for digit in N)

# 3의 배수 조건 확인
if sum_of_digits % 3 == 0:
    # 숫자들을 내림차순으로 정렬
    result = ''.join(sorted(N, reverse=True))
    print(result)  # 예시 출력: 84322211
else:
    print(-1)

이 예시에서 sorted(N, reverse=True)는 문자열 N의 각 문자를 내림차순으로 정렬한 리스트를 생성합니다. 그 후 ''.join(sorted_N)은 정렬된 문자들을 빈 문자열을 구분자로 사용하여 결합합니다.

결론

join() 함수는 Python에서 문자열을 효율적으로 결합하고자 할 때 매우 유용합니다. 이 함수를 사용하여 간결하고 읽기 쉬운 코드를 작성할 수 있으며, 다양한 유형의 이터러블에서 문자열 요소들을 쉽게 결합할 수 있습니다.