본문 바로가기
TIL

240920 TIL | 페이징, swift 이상한 문자 만들기

by 23g 2024. 9. 21.

0. TIL

잘한 점: 알고리즘 문제를 평소보다 깊이 있게 공부했다! | 불금에 1시까지 카페에서 공부하는 직장인이 있다....???

개선점 : 공부 편식하지 않기.. | 그런데 그 카페를 10시에 온 사람이 있다...???

배운 점: 문자열을 배열로 쪼겠다 합쳤다 할 필요가 없다 | 퇴근하고 바로 카페 가기 ^_ㅠ

 

알고리즘 기초 문제를 풀면서

계속 아직 안배운 문법 + 방식을 사용해야하다 보니 10분이면 풀 문제를

맨땅헤로 1시간씩 풀고 있는 대참사 발생

 

개념 공부를 언넝하고 문제를 풀어야하는데 왜 반대로 하고 이쓸까 ^_^...

 

이 부분 인지하고 효율적인 공부를 하즈ㅏㅏ

1. 데일리 루틴  

  cs 공부

질문 : 페이징(Paging) 기법의 개념과 동작 원리, 페이지 테이블의 역할에 대해 설명해주세요.

 

개념: 가상 메모리와 물리 메모리를 동일한 크기의 페이지와 프레임으로 나누어 매핑하는 메모리 관리 기법

동작 원리: 가상 주소를 페이지 테이블을 통해 물리 주소로 변환, 필요한 페이지만 메모리에 적재하고 나머지는 디스크로 스왑함

페이지 테이블 역할:
가상 주소와 물리 주소 매핑
페이지 유효성 및 보호 정보 관리
페이지 교체 시 정보를 제공

장점: 외부 단편화 방지, 효율적 메모리 관리, 멀티태스킹 지원

단점: 페이지 폴트 발생 시 성능 저하, 페이지 테이블 관리로 인한 메모리 오버헤드


  1일 1커밋

📜 문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다.
각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

⌨️ 입출력 예

s return
"try hello world" "TrY HeLlO WoRlD"

 

✏️ 나의 코드

// ❌ 정답률 약 50%의 틀린 코드임
// 주석은 오답 노트

func solution(_ s:String) -> String {
        
    var sepArr = s.split(separator: " ") //굳이,,쪼겠다 붙였다 할 필요 없이 s 쓰면 됨
    var wordArr: [String.Element] = [] // 위와 동일
    var Str = ""
    //새로운 단어가 될 때마다 짝/홀 판별하는 기능 없음

    for i in sepArr{ //s 쓰기
        wordArr = Array(i) //22...
        for (index, item) in wordArr.enumerated(){
            if index % 2 == 0{
                wordArr[index] = String.Element(item.uppercased())
            }
            // 짝수면 소문자로 뱐환하는 것도 추가해야함
            Str += String(wordArr[index])
        }
        print(wordArr)
        Str += " "
    }
    Str.removeLast()
    return Str
}

 

쩝 어떻게든 풀어보고 싶어서 발버둥 친 흔적 ㅎ

심지어 소문자로 변환하는거도 놓쳤네..!!!

 

📚 개선 코드

func solution(_ s: String) -> String {
    var result = "" //새로운 문자열을 담아야 함
    var isEven = true // 홀짝 판별을 위한 변수 생성

    for char in s { // 문자열을 한 글자씩 처리할 땐 String.Element로 나눈 배열 생성할 필요 없이 바로 s 사용
        if char == " " {
            result.append(char) //문자열에 바로 append (배열에만 사용 가능한거 아님)
            isEven = true // 공백을 만났기 때문에 다음 단어의 첫 시작을 짝수로 만들기 위해
        } else {
            result.append(isEven ? char.uppercased() : char.lowercased())
            //홀수면 대문자로 짝수면 소문자로 append
            isEven.toggle()
            //홀 <-> 짝 변경
        }
    }
    return result
}

 

물론 내가 구현한 코드가 틀린 코드이긴 하지만

내 코드보다 개선 코드가 훨씬 이해 잘됨..

스스로도 이해 안되는 스파겥히 그 잡채

 

이렇게 주석으로 오답 노트하는 방식은 처음 해봤는데 복습이랑 이해가 잘돼서 좋은 것 같다!


  swift 강의

강의명 : iOS에서의 네트워킹

 

런데이 하고 싶은데 비가 와서 슬픈 불금~~~ 🫠

카페 마감이라 쫓겨나 볼게요

집에 어케 가징