minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️React (0)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (12)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • GSLB
  • kafka구축
  • 구조체배열포인터
  • API문서정리
  • 리눅스파티션
  • 19년식그램SSD장착
  • 티스토리폰트배경색없애기
  • 이차원구조체배열포인터
  • NextJSSwagger
  • 19년식그램램장착
  • 구조체매개변수
  • 그램풀스팩업그레이드
  • AI배워야하나
  • hello테마
  • OpenGL회전
  • 인공지능개발자
  • 이것이C++이다책참고
  • SpringBootSwagger
  • mfc
  • 그램업그레이드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

알고리즘 문제풀이

문자열 문제 및 풀이 (Python)

2023. 12. 4. 21:20

코테 준비를 위한 알고리즘 공부 순서 

 위 링크에서 문자열 알고리즘 문제를 풀고 풀이를 기록하는 게시글입니다. 

 

 

8. 문자열

  • 문자열을 이용하여 문제를 해결하는 알고리즘이다.

 

문제

(❌ 표시는 혼자 못푼 문제)

 

1. 10808번 알파벳 개수 (브론즈4)  문제링크

더보기

문제 해석

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.

제한: 1초 256MB

 

입력

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

 

출력

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

 

코드

ord(문자) : 문자의 아스키코드 번호 반환

chr(숫자): 숫자에 해당하는 아스키 코드 반환

40ms

S = input()
for i in range(ord('a'), ord('z')+1):
    print(S.count(chr(i)), end=" ")

 

2. 10988번 팰린드롬인지 확인하기 (브론즈2)  문제링크

더보기

문제 해석

알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.
팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다. 
level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.

제한: 1초 256MB

 

입력

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

 

출력

첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.

 

코드

데칼코마니를 확인할때 arr[i] == arr[-(i+1)] 로 확인한다.

40ms

S = input()
strLen = len(S)
result = 1
for i in range(0, strLen//2):
    if S[i] != S[-(i+1)]:
        result = 0

print(result)

 

3. 1159번 농구 경기 (브론즈2)  문제링크

더보기

문제 해석

성의 첫글자가 같은 선수 5명을 선발하려고한다.

성의 첫글자를 모두 구해보자.

제한: 1초 128MB

 

입력

첫째 줄에 선수의 수 N (1 ≤ N ≤ 150)이 주어진다. 다음 N개 줄에는 각 선수의 성이 주어진다. (성은 알파벳 소문자로만 이루어져 있고, 최대 30글자이다)

 

출력

상근이가 선수 다섯 명을 선발할 수 없는 경우에는 "PREDAJA" (따옴표 없이)를 출력한다. PREDAJA는 크로아티아어로 항복을 의미한다. 선발할 수 있는 경우에는 가능한 성의 첫 글자를 사전순으로 공백없이 모두 출력한다.

 

코드

소문자 a는 97

소문자 z는 122

40ms

N = int(input())

arr = []
for _ in range(0, 26):
    arr.append(0)

for _ in range(N):
    s = input()
    asciiNo = ord(s[0]) - 97
    arr[asciiNo] += 1

result = "PREDAJA"
check = 1
for i in range(0, 26):
    if arr[i] >= 5:
        print(chr(i+ord('a')),end="")
        check = 0

if check:
    print(result)

 

4. 11655번 ROT13 (브론즈1)  문제링크

더보기

문제 해석

ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13글자씩 밀어서 만든다.
예를 들어, "Baekjoon Online Judge"를 ROT13으로 암호화하면 "Onrxwbba Bayvar Whqtr"가 된다. ROT13으로 암호화한 내용을 원래 내용으로 바꾸려면 암호화한 문자열을 다시 ROT13하면 된다. 앞에서 암호화한 문자열 "Onrxwbba Bayvar Whqtr"에 다시 ROT13을 적용하면 "Baekjoon Online Judge"가 된다.
ROT13은 알파벳 대문자와 소문자에만 적용할 수 있다. 알파벳이 아닌 글자는 원래 글자 그대로 남아 있어야 한다. 예를 들어, "One is 1"을 ROT13으로 암호화하면 "Bar vf 1"이 된다.
문자열이 주어졌을 때, "ROT13"으로 암호화한 다음 출력하는 프로그램을 작성하시오.

제한: 1초 256MB

 

입력

첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다.

 

출력

첫째 줄에 S를 ROT13으로 암호화한 내용을 출력한다.

 

코드

알파벳이 딱 26개라서 1:1 매칭된다.

44ms

S = list(input())

inputLen = len(S)
for n in range(inputLen):
    i = S[n]
    if 65<=ord(i)<=77 or 97<=ord(i)<=109:
        S[n] = chr(ord(i)+13)
    elif 78<=ord(i)<=90 or 110<=ord(i)<=122:
        S[n] = chr(ord(i)-13)
    print(S[n], end="")

 

5. 2870번 수학숙제 (실버4)  문제링크

더보기

문제 해석

상근이가 받은 종이에는 숫자와 알파벳 소문자로 되어있는 글자가 N줄 있다.

상근이는 여기서 숫자를 모두 찾은 뒤, 이 숫자를 오름차순으로 정리해야한다.

숫자의 앞에 0이 있는 경우에는 정리하면서 생략할 수 있다.

숫자의 앞 뒤에 문자가 있을 수 있다.

종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다.

각 줄에는 종이에서 찾은 숫자를 하나씩 오름차순으로 출력해야한다.

제한: 1초 128MB

 

입력

첫째 줄에 종이의 줄의 개수 N이 주어진다. (1 ≤ N ≤ 100)
다음 N개의 줄에는 각 줄의 내용이 주어진다. 각 줄은 최대 100글자이고, 항상 알파벳 소문자와 숫자로만 이루어져 있다.

 

출력

종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다. 각 줄에는 종이에서 찾은 숫자를 하나씩 출력해야 한다. 이때, 비내림차순으로 출력해야 한다. 비내림차순은 내림차순의 반대인 경우인데, 다음 수가 앞의 수보다 크거나 같은 경우를 말한다.

 

코드

48ms

N = int(input())

arr = []
for _ in range(N):
    s = input()
    for i in range(ord('a'), ord('z')+1):
        s = s.replace(chr(i)," ")
    
    arr += list(map(int,s.split()))
    
arr.sort()

for i in arr:
    print(i)

 

이 문제의 포인트

* split()은 공백을 기준으로 split하되 아무것도 없는 요소는 list 요소에 포함시키지 않는다.

s = "hello      world"

mylist = s.split()    -> ['hello','world'] 이다.

['hello','','','','','world'] 가 아니라는 것을 알아둘것!

 

추가문제

더보기

6. 20920번 영단어 암기는 괴로워 (실버3)  문제링크

 

7. 1515번 수 이어 쓰기 (실버3)  문제링크

 

8. 2607번 비슷한 단어 (실버3)  문제링크

 

9. 1213번 팰린드롬 만들기 (실버3)  문제링크

 

10. 20310번 타노스 (실버3)  문제링크

 

11. 9996번 한국이 그리울 땐 서버에 접속하기 (실버3)  문제링크

 

12. 22233번 가희와 키워드 (실버2)  문제링크

 

13. 1522번 문자열 교환 (실버1)  문제링크

 

14. 4659번 비밀번호 발음하기 (실버1)  문제링크

 

15. 20437번 문자열 게임 2 (골드5)  문제링크

 

16. 2179번 비슷한 단어 (골드5)  문제링크

 

17. 9935번 문자열 폭발 (골드4)  문제링크

 

 

'알고리즘 문제풀이' 카테고리의 다른 글

분할정복 문제 및 풀이 (Python)  (0) 2023.12.04
백트래킹 문제 및 풀이 (Python)  (0) 2023.12.04
이진탐색(Binary Search) 문제 및 풀이 (Python)  (0) 2023.12.04
구현 문제 및 풀이 (Python)  (0) 2023.12.04
동적계획법(DP) 문제 및 풀이 (Python)  (0) 2023.12.04

    티스토리툴바