[백준] 1157번(문자열 정렬, 복사)

·2022년 11월 8일

백준 문제풀이

목록 보기
13/159

백준 1157번

최종 제출 코드

S = input().upper()
test = [0]*26

for i in S:
  test[ord(i)-65] += 1

value = max(test)
lists = test.copy()
lists.sort(reverse=True)

if lists[0]==lists[1]:
  print("?")
else:
  print(chr(test.index(value)+65))

문자열 정렬

a.sort : 오름차순 정렬
a.sort(reverse=True) : 내림차순 정렬


문자열 복사

a = b : 이 방식으로 리스트를 복사하게 되면 ab 리스트에 변경사항이 발생할 시 다른 쪽에도 반영된다. 객체를 복사한 것이 아니라 객체의 주소를 복사한 것이기 때문이다.

✅ shallow copy(얕은 복사)

a = b.copy() : a를 변경해도 b에는 반영되지 않음
a = b[:] : a를 변경해도 b에는 반영되지 않음
✔ 위의 두 경우는 '얕은 복사'로 ab는 다른 객체를 가리키고 있지만 리스트 내부에 존재하는 객체는 같은 객체를 가리키고 있다.
✔ 따라서 리스트 원소가 참조형 변수일 경우 한 쪽 리스트의 원소만 변경해도 다른 쪽의 리스트의 원소도 변경된다.

✅ deep copy(깊은 복사)

import copy
a = copy.deepcopy(b)
✔ 위의 경우는 copy 모듈을 이용하여 deepcopy 함수를 호출
✔ 객체의 변형성에 따라서, 불변형 객체는 그대로 가져오고 변형 객체는 새로운 공간에 값을 복사하여 가져오게 된다.
✔ 이 경우 완벽한 복사를 할 수 있지만 변수 생성에 시간이 오래 걸리고 메모리를 많이 사용한다는 단점이 있다.

[문자열 복사 출처]


다른 사람이 작성한 코드

word = input().lower()
word_list = list(set(word))

cnt = []

for i in word_list:
  count = word.count(i)
  cnt.append(count)
  
if cnt.count(max(cnt)) >= 2:
  print("?")
else:
  print(word_list[(cnt.index(max(cnt)))].upper())

리스트에 존재하는 원소에 대해서만 체크
전체 알파벳 개수 만큼 리스트를 만들 필요가 없음

✅ count 함수

list.count(값) : 리스트 안에 매개변수 값과 동일한 원소의 개수를 반환한다.

[코드 출처]

profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글