본문 바로가기
SSAFY

[수업기록] 알고리즘 : string

by 주니코니 2024. 8. 2.

240802

 

1. 문자의 표현

1) 컴퓨터에서 문자를 어떻게 표현하는가?

- 숫자(부호)만을 처리한다. 

- A라는 글자 모양 그대로 비트맵으로 저장시 메모리 낭비가 심하고

- 각 문자에 대해서 대응되는 숫자를 저장해놓고 메모리에 저장하는 방법을 쓴다

- 표준 ASCII(미국 문자 표준 인코딩)가 등장 : 7-bit 인코딩, 10진수(32~126)나 16진수로 표현

- bit란? 8 bits = 1 byte (byte란 주소가 부여되는 최소단위 -> 64byte 노트북은 한번에 처리할 수 있는 주소 단위)

- 그러나  ... 네트워크가 전세계적으로 발달하면서 각국의 문자를 정해놓은 규칙을 하나로 정리한 unicode가 등장

 

2) 유니코드도 다시 character set으로 분류된다

- ex. UCS-2, UCS-4 -> 문자 저장 방식에 정해진 순서가 없음

- 유니코드의 외부 인코딩 필요해짐

-> UTF-8(in web) : 최소 8비트부터 최대 32비트까지(저장하는 내용에 따라 길이 가변)

-> UTF-16(in windows, java) : 16비트부터 32비트까지

- 파이썬은 문자열을 유니코드(UTF-8)로 저장

 

3) CRLF : ASCII 코드의 제어문자

- windows -> CR(?) + LF(줄바꿈)

print(ord('A') #아스키코드 숫자로 리턴
print(chr(65)) #숫자를 아스키코드로 변환

 

 2. 문자열 예제

# swap : (자기) 문자열 앞뒤로 바꾸기
str = 'hello'
n = len(str)
arr = list(str)
for i in range(n//2):
    arr[i], arr[n-1-i] =arr[n-1-i],arr[i]

print(''.join(arr))
#strlen() 함수 만들어보기 : \0을 만나면 이를 제외한 글자수를 리턴
cnt = 0
def strlen(arr):
    for a in arr:
        if a == '\0':
            break
        else:
            cnt += 1
    print(cnt)


    # 다시 while문으로 구현
    i = 0
    while arr[i] != '\0':
        i += 1
    print(i)

 

#문자열 뒤집기 
s = 'hello'

#1
s = s[::-1]

#2 
lst = list(s)
lst.reverse()
answer = ''.join(lst)
print(answer)

 

  3. 문자열 비교

# == 연산자는 내부적으로 특수 메서드 __eq__()를 호출

#참조 # 복사
s1 = 'abc'
s2 = 'abc'
s3 = 'def'
s4 = s1
s5 = s1[:2] + 'c' #슬라이싱 : 주소값(참조위치) 다르게 생성
print(s1 is s2)
print(s4 == s1)
print(s5 == s1)
print(s5 is s1)
print(s4 == s1)

 

아스키코드는 유니코드의 하위 집합이다. 즉, 아스키코드로 표현하는 문자들은 동일한 코드 포인트를 유니코드에서 사용한다. 유니코드는 모든 언어의 문자, 이모지, 기호 등을 포함하여 전세계의 문자를 표현할 수 있음!

#알파벳 리스트 만들기

# ord() 함수는 문자를 유니코드 코드 값으로 변환합니다.
# chr() 함수는 유니코드 코드 값을 문자로 변환합니다.

# a부터 z까지의 리스트 생성
alphabet_list = [chr(i) for i in range(ord('a'), ord('z') + 1)]

print(alphabet_list)