상세 컨텐츠

본문 제목

99클럽 코테 스터디 2일차 TIL + 오늘의 학습 키워드 : 문자열

본문

728x90
반응형

2일차 도장 꾹!!!!!!!!!!!!!!!!!

 

제목: 99클럽 코테 스터디 2일차 TIL + 오늘의 학습 키워드 : 문자열

- 오늘의 학습 키워드 : 문자열

미션 1완료


- 공부한 내용 본인의 언어로 정리하기
1.len()함수
: len()함수는 주어진 객체의 길이나 크기를 반환하는 함수이다.

주로 문자열, 리스트, 튜플, 딕셔너리 등 다양한 데이터 타입에 사용되어진다.

사용예시

# 사용범
len(객체)
########
# 1. 문자열의 길이 
s= "Hello, World!"
print(len(s)) # 출력 : 13

# 2. 리스트의 길이
lst = [1,2,3,4,5]
print(len(lst)) # 출력 : 5

# 3. 튜플의 길이
tup = (1,2,3)
print(len(tup)) # 출력 :3

# 4. 딕셔너리의 길이
d = {'a':1, 'b':2, 'c':3}  # a:b 라고 했을 때 a가 key b가 value이다. 길이 측정은 키의 개수
print(len(d)) # 출력 :3 ( 키의 개수)

2. range()함수

: range()함수는 주어진 범위의 숫자를 생성하는 함수이다. 기본적으로 세 가지 인자를 받는다.
* start : 시작 값 (default 0)

* stop : 종료 값( 이 값 포함 X)

* step : 증가 값(default 1)

사용예시

# start : 시작 값 (default 0)
# stop : 종료 값( 이 값 포함 X)
# step : 증가 값(default 1)


range(5) # 0부터 4까지의 숫자를 생성 : 0,1,2,3,4
range(1,5) # 1부터 4까지의 숫자를 생성 : 1,2,3,4
range(1,10,2) # 1부터 9까지의 홀수를 생성 :1,3,5,7,9

 

3. for - in문

:for문은 시퀀스(리스트, 튜플,문자열 등)의 각 요소에 대해 반복 실행하는 데 사용됩니다.
for문의 형태는 아래와 같다.
사용예시

for 변수 in 시퀸스 :
	#반복할 코드
    
# 1. 리스트 순회
fruits = ['사과', '바나나', '체리']
for fruit in fruits:
    print(fruit)
#<결과 출력>    
#사과
#바나나
#체리
    
# 2. 범위 사용
for i in range(3):
    print(i)
    
#<결과 출력>    
#0
#1
#2

# 3. 문자열 순회 
word = "데브수달"
for letter in word:
    print(letter)
#<결과 출력>    
데
브
수
달

# 4. 열거형 
#enumerate() 함수를 사용하면 
#인덱스와 값을 함께 가져올 수 있습니다.
colors = ['빨강', '초록', '파랑']
for index, color in enumerate(colors):
    print(index, color)
#<결과 출력>     
#0 빨강
#1 초록
#2 파랑

# 5. 중첩 For문
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for row in matrix:
    for number in row:
        print(number, end=' ')
    print()  # 줄 바꿈
#<결과 출력>  
#1 2 3 
#4 5 6 
#7 8 9


4.subString 부분 문자열 

: 함수라고 정의하기보다는 문자열에서 내가 원하는 인덱스 지점을 지정해서 subString을 출력하는 방법이다.

 # t를 정의
t ="123422"
 # 문자열 t의 0번 인덱스부터 
 #2번 인덱스 직전까지의 부분 문자열을 의미하는 것.
t[0:2]

#출력 -> '12'  <- 0번, 1번 인덱스
# t를 새롭게 정의
t "3141592"
t[0 : 3]	# '314'
t[1 : 4]    # '141'
t[2 : 5]    # '415'
==<문자열의 첫번째는 인덱스 0번부터>==
 3  1  4  1  5  9  2 
[0][1][2][3][4][5][6]

문자열의 첫 인덱스는 0번부터 시작된다.
문자열 인덱싱에서 시작 인덱스는 포함되지만, 끝 인덱스는 포함되지않는다는 것도 기억할 것.


- 오늘의 회고

오늘의 회고...;;
매일 매일 내가 제대로 파악하지 못한 함수와 구조가 튀어나온다.
아주 아주 기초인데 말이다!

그러기에 항해99클럽...정말 잘 신청했다라는 생각이 들었습니다.
비록 이론강의를 따로 듣지는 못하지만,
문제를 푸는 과정에서 찾아보고 검색하면서 
함수들을 알아가는 것만으로도 공부가 되기 때문이네요 ㅠㅠ 

감사합니다.

 

**추가**

델파이에서 dll를 stdcall; external;  'filename.dll'  와 같은 정적으로 호출하는 법을 알았고,
쓰고 싶은 dll이 C기반이라면 위와 같은 방식을 쓰면 되지만,
C기반의 dll은 컴파일러가 어려워서 인터넷상에 나온 프로그램으로도 어느정도 찾아보는 게 한계가 있음을 알았다.

 

반면에 , C# 에서 쓰는 .NET 기반의 .dll 파일의 구조를 보는 방법으로는 
JetBrains의 dotPeek 를 이용하면 dll파일의 메소드 찾아보기에도 구조를 트리형식으로 볼 수 있다는 것을 알게되었다.

추가로 excel로 바코드 생성 QR 생성하는 API 사이트도 알았는데, 아직 제대로 사용해보지를 못했다.

프로그램적으로 엑셀파일 불러오기 및 관련 셀 위치에 해당 함수를 적용하면 인터넷이 되는 곳에서는
QR이 생성되서 엑셀에 표시가 되고 해당 위치의 QR를 이미지로 저장하고
저장한 경로를  프로그램 내 픽쳐스나 이미지라는 컴포넌트에 불러오는 방식으로 어떻게 쓰면 되지 않을까
구상했지만,,, 역시... 우선 엑셀에 QR부터 제대로 실행해보고 순차적으로 해결해야 할 것 같다. 

 

 

- 어떤 문제가 있었고, 나는 어떤 시도를 했는지

오늘도 문자열에 관련된 문제가 나왔다.
'크기가 작은 부분문자열' 이라는 주제의 문제였고,

def solution( t, p)  # <- t, p를 받는다. t, p는 각각 string 타입이지만, 숫자로 이루어진 string형태이다.

 

요기서 처음에는 부분 문자열이라고해서
for문을 이용해서 문자열에서 원하는 길이만큼
예를 들어서 t[i : i+p.len()] 와 같이해서 p의 길이를 len()으로 "271"이면 문자가 3개니깐 3이 나오고
i를 0부터 시작한다고 하면
t "3141592" 니깐
t[0 : 3]    # 314
t[1 : 4]    #141
t[2 : 5]   # 415 
까지는 구할 수 있겠구나는 생각했지만,
range와 문법을 구사할 줄 몰라서 처음에는 틀렸다.

그 이후에는 뤼튼ai에게 적절한 문제에 대한 해답과 방법을 배웠고, 다른 분들의 풀이를 참고했습니다.




 

 

- 어떻게 해결했는지

 

def solution(t, p):
    p_length = len(p)
    count = 0
    
    # t의 길이에서 p의 길이를 뺀 만큼 반복
    for i in range(len(t) - p_length + 1):
        # 부분 문자열 추출
        substring = t[i:i + p_length]
        # 정수로 변환
        num = int(substring)
        
        # num이 p보다 작거나 같은지 확인
        if num <= int(p):
            count += 1
            
    return count

1.  p_length 라는 변수는 p의 문자열의 길이를 integer로 반환해줍니다.
ex) p = "1234" p_length = 4    # 만약에  p="4213521" 이면 p_length = 7 이런식으로 반환되서 저장됩니다.
2. count라는 변수를 지정한 이유도 가끔 java 공부 할 때 조건에 충족한 횟수를 체크할 때 쓰는 변수를 썼던 것 같다. 
    이곳에서도 그렇다. 
3. 문제를 보고 위의 주석으로 단 부분처럼 알고리즘을 해석하는 부분은 중요한 것 같다.

요기서부터는 t와 p에 임시의 문자열을 가정해보겠다.
t = "123422" p ="23"

 

p_length = 2

count = 0

                       #5

for i in range( (6 - 2)+1 ):   # 0~4까지의 숫자를 출력한다. i는 기본 0 

substring - t[0:2] # "12" 문자열 t의 0번 인덱스부터 2번 인덱스 직전까지의 부분 문자열을 의미
num = 12 # str형태의 앞에 int를 붙이면 문자열을 정수형 타입으로 데이터 전환이 일어지고 num은 숫자12이다.

 

12 <= 23 # t의 부분문자열이였던 숫자가 p보다 작기때문에
count = count +1 이기에 
0 = 0+1 =1 
count는 1이됩니다.

이러한 과정이 반복됩니다.


 


- 무엇을 새롭게 알았는지

1. 부분 문자열의 s[ a : b] 를 해석하는 방법을 확실히 알았다. 문자 인덱싱은 0부터 시작이고 , b에 오는 숫자 직전까지의 인덱스를 출력하는 것!! 
ex) s[2:4] 이면 s문자열의 [2][3] 까지가 출력된다. 이건 이제 확실히 알게되었습니다.

 

2. for - in  : 의 구조에 대해서 배울 수 있었고 , range함수를 주로 사용하게 된다는 것도 알았다.

 

3. len()함수와 어제 사용한 count() 함수의 차이와 공통점이 궁금해졌다. 무튼 len()함수에 대해서 알았습니다.

- 내일 학습할 것은 무엇인지

어제 마저 작성 못한 유닉스시스템의 문제들을 노트에 정리하고,
C# 비주얼 스튜디오 켜서 한개라도 프로젝트 진행하고 마무리 할 예정이고,

내일은 또 코테 하면서 모르는 함수나 새롭게 알게된 함수나 구조에 대해서 공부 할 예정입니다!!


 

2024.10.28 - [[공부&수업]/코딩테스트 연습] - 99클럽 코테 스터디 1일차 TIL + 오늘의 학습 키워드 : 문자열(4기|파이썬|비기너)

 

99클럽 코테 스터디 1일차 TIL + 오늘의 학습 키워드 : 문자열(4기|파이썬|비기너)

제목: 99클럽 코테 스터디 1일차 TIL + 오늘의 학습 키워드 : 문자열- 오늘의 학습 키워드 : 문자열오늘은 항해99클럽의 첫날이다.친절하게도, 카카오톡으로 문제가 나왔으니 풀어보시라고 안내 톡

exit9509.tistory.com

이전 공부 내용이 궁금하신 분은 저의 1일차 게시물을 확인해주세요!!

728x90
반응형

관련글 더보기