본문 바로가기
TIL

241108 델리게이트 패턴, 슬라이딩 윈도우, CPU 아키텍쳐

by 23g 2024. 11. 8.

0. 회고 및 개선점 📝

  • 느낀 점:
    • 델리게이트 패턴을 더 확실히 이해하게 됨
    • cs -> 가랑비에 젖는 효과가 아주 조금 나타나는 중
    • swift 메서드가 아직 익숙치 않아서 사용에 어려움을 느끼는 중 ㅜㅜ~
  • 잘한 점 : 불금, 오후 11시 반에 스카에서 이걸 쓰고 있다는 거 자체가 잘함 ㅠ
  • 개선 점 : 주말엔 꼭 코테 복습하기!!!!!!!!
  • 앞으로 :
    • 코테 복습

1. 오늘 배운 내용 📘 (데일리 루틴)

swift 강의

강의명 : 델리게이트 패턴 톺아보기

  • 키워드: 델리게이트 패턴, 프로토콜
  • 개요:
    • 델리게이트는 객체간의 커뮤니케이션을 위한 것이고,
      방법은 대리자를 프로토콜로 진행!

1일 1커밋

📜 문제 설명

숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.

⌨️ 입출력 예

t p result
"3141592" "271" 2

✏️ 나의 코드

import Foundation

func solution(_ t:String, _ p:String) -> Int {
    //1. p의 문자열 길이를 구한다.
    let leg = Int(p[p.startIndex])
    var arr: [String] = []
    var to = t.startIndex
    var from = t.endIndex
    //2. t를 1의 길이가 되는 문자열로 쪼갠다.
    for i in 0..<5{
        // ❌ from이 i값의 변화에 따라 변화하지 않음
        var from = t.startIndex
        var to = t.index(from, offsetBy: leg)
        var str = t[from..<to]
        arr.append(String(str))
        print(arr)
    }
    //3. 2와 p를 Int로 변환
    //4. 3과 p를 비교해서 작거나 같으면 count +1 한다.
    return 0
}

하다가 포기 ㅎ

📚 개선 코드

import Foundation

func solution(_ t: String, _ p: String) -> Int {
    // 1. p의 길이를 구함
    let leg = p.count  
    // 2. 정답 카운트를 위한 변수 초기화
    var count = 0  
    // 3. t와 p를 Int로 비교하기 위해 p를 미리 Int로 변환
    let target = Int(p)!

    // 4. t에서 p의 길이만큼 슬라이딩 윈도우 방식으로 부분 문자열을 순회
    for i in 0...(t.count - leg) {
        // 5. 시작 인덱스와 끝 인덱스를 계산하여 부분 문자열 생성
        let start = t.index(t.startIndex, offsetBy: i)
        let end = t.index(start, offsetBy: leg)
        let substring = t[start..<end]

        // 6. 부분 문자열을 Int로 변환 후 p의 값과 비교
        if let num = Int(substring), num <= target {
            count += 1  // 7. 조건을 만족하면 카운트 증가
        }
    }
    return count  // 8. 최종 결과 반환
}

cs 공부

질문 : 2. 캐시 메모리의 개념과 역할에 대해 설명해주세요

답변 :

더보기

CPU 아키텍처를 쉽게 말하면 컴퓨터의 뇌가 명령을 처리하는 방식임. ARM과 x86이 가장 많이 쓰이는 두 종류임.

1. ARM 아키텍처

  • 설명: ARM은 간단한 명령어로 빠르게 일하는 구조임. 덜 복잡한 일을 자주 반복하는 방식이어서 힘을 적게 쓰고 오래 일할 수 있음.
  • RISC(Reduced Instruction Set Computer) 아키텍처를 따름
  • 장점: 배터리를 적게 쓰기 때문에 스마트폰 같은 모바일 기기에 아주 잘 맞음. 또한, 발열이 적어서 열이 많이 나지 않아 기기가 더 시원하게 유지됨.
  • 어디에 많이 쓰임? 주로 스마트폰, 태블릿, 스마트워치 같은 배터리를 사용하는 기기들에 많이 사용됨. 요즘은 전기를 아끼는 데이터 센터나 가벼운 노트북에서도 사용되고 있음.

2. x86 아키텍처

  • 설명: x86은 명령어가 많고 복잡한 일을 한 번에 처리하는 방식임. 복잡한 연산이나 많은 계산이 필요할 때 고성능을 낼 수 있음.
  • CISC(Complex Instruction Set Computer) 아키텍처를 따름
  • 장점: 더 많은 명령어를 지원해 컴퓨터가 복잡한 작업을 빠르게 처리할 수 있음. 그래서 복잡한 작업이나 고성능이 필요한 곳에서 많이 사용됨.
  • 어디에 많이 쓰임? 주로 데스크탑 PC나 서버, 고성능을 요구하는 컴퓨터에서 많이 사용됨.

요약하자면

  • ARM: 힘을 덜 쓰고 오래가는 기기에 잘 맞음. 스마트폰, 태블릿 같은 기기.
  • x86: 힘을 더 많이 쓰지만 복잡한 작업을 잘 처리함. 데스크탑, 서버 같은 고성능 기기.

쉽게 말해, ARM은 전기 덜 먹고 오래가는 스타일, x86은 복잡한 일을 빠르게 해내는 스타일임.


💬

아이고 힘들다

그래도 요즘 공부가 잼따 앙뇽