본문 바로가기

내일배움캠프 안드로이드 3기

[TIL] 24.01.29

1. 알고리즘 문제 해결

 

 

2022는 무엇이 특별할까?(백준 24268):

 간단한 백트래킹 문제이다. 브루트 포스가 아닌 어떤 수학적인 솔루션이 있지 않을까 계속 고민하다가 오히려 애를 먹었다. 한참 구현하다보니 코드 분기 처리가 너무 난잡해져서, 그제서야 브루트 포스로 구현했다.

 단순하게 모든 경우를 고려하려고 하면 d^d 개의 케이스를 탐색해야해서 시간 초과가 난다. 처음에 이 생각 때문에 곧장 브루트 포스로 풀지 않았던건데, 다시 생각해보니 등장한 숫자들을 따로 저장해주는 배열이 있다면 d! 개의 케이스로 줄어들어서 충분히 풀 수 있었다. 또, d^(d-1) 자리는 문제 조건에 의해 0이 들어갈 수 없기 때문에 더 줄일 수 있다.

 저정도 조건만 가지치기 해주고 백트래킹으로 풀었더니 무난하게 통과했다.

 

 

 

좋은 친구(백준 3078):

 큐와 이름길이별 학생 수 배열을 이용하면 쉽게 해결되는 문제. 슬라이딩 윈도우로 구현해서 풀면 된다. 큐에는 K개 이하의 원소만 저장되게 하고, 학생 이름을 하나씩 입력 받는다. 이 때, 큐가 넘쳐있던 상태라면 큐의 front를 제거하면서 이를 이름길이 배열에 반영해준다. 이렇게 되면 큐와 배열엔 입력 받은 학생으로부터, K등 위의 학생들 정보까지만 존재하는 상태가 된다. 이름 길이 배열을 찾아 입력받은 학생의 이름 길이에 해당하는 값을 결과에 더해준 뒤, 입력 받은 학생을 큐에 넣고 배열에도 반영한다.

 위를 모든 학생에 대해 순차적으로 반복하게 되면 문제에 해당하는 원소 쌍의 수를 구해낼 수 있다.

 

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int main() {
    cin.tie(nullptr);
    ios_base::sync_with_stdio(false);

    int n, k;
    cin >> n >> k;

    vector<int> nameNum(21, 0);

    queue<int> q;
    string s;
    long long result = 0;
    for(int i=0; i<n; i++) {
        cin >> s;
        int nameLen = s.size();
        if(q.size()>k) {
            nameNum[q.front()]--;
            q.pop();
        }
        result += nameNum[nameLen];
        q.push(nameLen);
        nameNum[nameLen]++;
    }

    cout << result;
    return 0;
}

 

 

 

2. 데일리 미션 - 앱개발 용어 정리 2

 

버그(Bug): 소프트웨어 상에서 발생하는 의도되지 않은 동작들

에러(Error): 소프트웨어 엔지니어링 과정에서 발생하는 오류들, 컴파일 에러, 런타임 에러, 로지컬 에러 등이 존재한다.

예외처리: 에러에 대한 핸들링을 통해, 실패 경험을 막는 것.

라이브러리(Library): 소프트웨어 개발 시에 이용할 수 있는, 미리 만들어진 메소드 및 클래스 등의 집합. 사용자가 의도에 따라 호출하여 사용하게 된다.

프레임워크(Framework): 소프트웨어 개발 시에 이용할 수 있는, 미리 만들어진 뼈대. 프레임워크의 제한적인 가이드라인에 따라 사용자가 맞춰 구현하게 된다.

퍼블리싱: 일반적으로 소프트웨어 출시 및 배포에 대한 일련의 과정들을 뜻하며, 웹 분야에선 디자인 요소를 웹 디자인 표준에 맞춰 만들어 제공하는 것을 의미함.

UI(User Interface): 사용자가 소프트웨어와 상호작용하는 방식. CLI, GUI 등이 일반적이다.

UX(User Experience): 사용자가 소프트웨어와 상호작용하며 얻게 되는 경험. 세심한 UI 설계 및 뛰어난 소프트웨어 퍼모먼스 등으로 긍정적인 경험을 제공할 수 있다.

클라이언트: 서버-클라이언트 모델에서, 서버의 서비스를 이용하는 쪽, 혹은 네트워크 상에서 단말 개체. 일반적으로 사용자들이 이용하는 디바이스를 일컫는다.

API: Application Programming Interface, 응용 프로그램이 서버, 시스템 소프트웨어 등과 통신하기 위해 이용하는 인터페이스를 의미한다. 일반적으로 정해진 프로토콜을 이용해 추상화된 인터페이스를 제공하며, 이를 이용하는 소프트웨어 측에선 적절한 호출을 통해 미리 약속된 로직의 결과를 받을 수 있다.

'내일배움캠프 안드로이드 3기' 카테고리의 다른 글

[TIL] 24.01.31  (0) 2024.01.31
[TIL] 24.01.30  (0) 2024.01.30
[TIL] 24.01.26  (1) 2024.01.26
[TIL] 24.01.25  (0) 2024.01.25
[TIL] 24.01.24  (1) 2024.01.24