[Python] 기초 문제 : 프로그래머스 숫자짝꿍 외 1

Coding Test

목록 보기
3/14
post-thumbnail
2024년 6월 작성

프로그래머스 Lv. 1 숫자짝꿍


주어진 두 문자열 X, Y는 정수로 이루어진 문자열이다. 둘을 비교하여 서로 짝을 이루는 숫자들을 모은다. 모은 숫자들로 가장 큰 수를 만들어 return한다. 짝을 이루는 숫자가 없다면 "-1"을 return한다. 0은 두개 이상 짝을 이뤄도 "0"을 return한다.

1️⃣ 내 코드

def solution(X, Y):
    from collections import Counter
    
    counter_x = Counter(X)
    counter_y = Counter(Y)
    common = []
    
    for digit in counter_x:
        if digit in counter_y:
            common.extend([digit] * min(counter_x[digit], counter_y[digit]))
    
    if not common:
        return "-1"
    
    common.sort(reverse=True)
    if common[0] == '0':
        return "0"
    
    return ''.join(common)

핵심 코드

👉 : 두 문자열에서 공통으로 등장하는 숫자와 그 빈도수를 비교하여, 최소 빈도수만큼 common 리스트에 추가하는 코드


extend() 메서드
✔ 다른 리스트나 iterable(반복 가능한 객체)의 요소들을 기존 리스트에 추가한다.
✔ append()와 다른 점
◾ append()는 리스트의 끝에 단일 요소를 추가한다.
◾ extend()는 리스트의 끝에 iterable의 모든 요소를 추가한다.

# append() 예제
list1 = [1, 2, 3]
list1.append([4, 5, 6])
print(list1)  # 출력: [1, 2, 3, [4, 5, 6]]# extend() 예제
list1 = [1, 2, 3]
list1.extend([4, 5, 6])
print(list1)  # 출력: [1, 2, 3, 4, 5, 6]

''.join(list명)

리스트의 요소들을 하나의 문자열로 병합

Counter

collections 모듈의 Counter 클래스는 dictionary를 확장한 클래스로, 데이터의 개수를 셀 때 유용하다.

counter_x = Counter(X)  
counter_y = Counter(Y)  

각 문자열에서 각 숫자의 빈도수를 계산한다.

2️⃣ 다른 분의 코드

def solution(X, Y):
    answer = ''for i in range(9,-1,-1) :       # 🟠
        answer += (str(i) * min(X.count(str(i)), Y.count(str(i))))if answer == '' :
        return '-1'
    elif len(answer) == answer.count('0'):   # 🟢
        return '0'
    else :
        return answer


내가 제출한 코드와 비슷한 듯하지만 🟠 부분이나 🟢 부분의 아이디어가 다르다.




코드업 (기초-리스트)

이상한 출석 번호 부르기1

선생님이 출석부를 보고 출석을 부르시는데 이상하게 부르신다. 얼굴과 이름을 빨리 익히기 위해 학생들의 번호를 랜덤으로 부르고 얼굴과 이름이 잘 기억되지 않는 학생들은 번호를 여러 번 부르신다.

출석 번호를 n번 무작위로 불렀을 때, 각 학생의 번호(1~23)가 불린 횟수를 각각 출력해보자.

1️⃣ 내 코드

from collections import Counter

rollbook = []
n = int(input())
strange = input().split(' ')

counter_strange = Counter(strange)
list_counter_strange = list(counter_strange)
list_counter_strange.sort()

for i in range(1, 24):
	if str(i) in list_counter_strange:
		rollbook.append(str(counter_strange[str(i)]))
	else:
		rollbook.append('0')

answer = ' '.join(rollbook)
print(answer)

2️⃣ 예시 코드

n = int(input())
a = input().split()

for i in range(n) :
  a[i] = int(a[i])   # a에 순서대로 저장되어있는 각 값을 정수로 변환해 다시 저장

d = []
for i in range(24) :
  d.append(0)

for i in range(n) :    # 번호를 부를 때마다, 그 번호에 대한 카운트 1씩 증가
  d[a[i]] += 1   # ⚪

for i in range(1, 24) :  # 카운트한 값을 공백을 두고 출력
  print(d[i], end=' ')

d\[a\[i\]\] += 1 
2중 리스트 참조 : 만약 a[i]의 값이 1이었다면? d[1] += 1 이 실행되는 것이다. 1번 카운트 1개 증가

profile
학습 메모장 : 코테 및 알고리즘, 언어 문법, Java 기본 강의...

0개의 댓글