호우동의 개발일지

Today :

[C++] 백준 22859 - HTML 파싱
Algorithm/BOJ 2023. 2. 12. 18:47

문제 이해 단계 https://www.acmicpc.net/problem/22859 상당히 문제가 길고 조건이 많은 문제라 필요한 조건만 밑에 적어보자. HTML 문법 형식으로 줄 바꿈 없이 한 줄로 입력이 들어온다. 핵심이 되는 태그는 이다. 1. 모든 태그와 문자열은 ~ 사이에서 벌어져야 한다. 2. 안에 공백은 존재하지 않는다. 그러니까 이런 식으로 주어지진 않는다는 소리이다. 해당 조건이 주어질 때, 해 당 출력 형식으로 정확히 출력하는 문제이다. 문제 접근 단계 이 문제는 딱 봐도 구현문제다. 그냥 대놓고 구현해 볼 테 면 해봐라 이런 식인 것 같다. 구현해야 할 부분이 많을 것 같아서 함수를 잘 나눠서 설정해둬야 할 것 같다. 일단 필요한 기능을 살펴보자. 최우선적으로 (1) 들어온 문자열을 ..

article thumbnail
[Unity 3D] 캔버스 최적화를 통한 퍼포먼스 향상(Text 예시)
Unity Study/Concept 2023. 2. 10. 17:53

Canvas 최적화 프로파일러로 분석 Text를 변경하는 스크립트를 통해 프로파일러로 퍼포먼스 분석 PostLateUpdate.PlayerUpdate를 보면 Canvas에서 그려지는 작업이 발생하는 것을 알 수 있다. → 텍스트를 변경하는 작업은 Canvas에서 발생 버텍스 버퍼 유니티의 UI는 화면에 그려질 때 버텍스 버퍼(Vertex Buffer)로 그려짐 Scene → WireFrame으로 보면 버텍스 버퍼를 볼 수 있음 버텍스는 하나의 선(line) 단위 해당 그림에서는 총 28개의 버텍스가 존재 더보기 버텍스 버퍼는 Canvas에 위치함 그려지는 과정 버텍스 버퍼의 변형이 발생 해당 버텍스 버퍼를 리빌드(Rebuild) 최적화가 필요한 이유 하나의 UI가 변경이 일어나면 그 Canvas 전체를 ..

article thumbnail
[C++] 편리한 문자열 분리(split) 방법(istringstream vs stringstream)

백준에서 알고리즘 문제를 풀다 보면 띄어쓰기나 특정 단어를 기준으로 분리해야 할 때가 있다. 나도 그런 일이 잦아서 사용하기 편한 라이브러리 함수들을 쓰려고 하는데, 이상하게 Split 관련 부분은 항상 헷갈려서 검색을 하게 된다. 그래서 이번 기회에 블로그에 확실히 정리하려고 한다. istringstream #include 헤더를 포함시키면 사용 가능 문자열 format을 파싱(parsing)할 때 쓰는 클래스이다. 문자열에서 필요한 값을 추출하고 공백과 '\n'을 무시한다. 코딩 테스트에서 활용 #include #include using namespace std; int main(){ string str1 = "This is Test"; string str2 = "AB/CDE/DFDG/ASCD"; /..

article thumbnail
[Unity 3D] 프로파일러(Profiler)로 퍼포먼스 스파크(Performance spark) 현상 알아보기
Unity Study/Concept 2023. 2. 9. 20:51

프로파일러 유니티 엔진에서 제공해 주는 유니티에서 개발하고 있는 앱을 분석할 수 있는 툴 매 프레임마다 구체적인 퍼포먼스를 분석할 수 있음 게임의 최적화를 위해 사용 Deep Profile을 통해 정밀 분석 가능 어떤 모드로 분석을 하는 것은 자유지만 필자는 Hierarchy로 보는 게 편해서 해당 모드로 분석 해당 상태에서 게임을 시작하면 분석 차트가 흘러나옴. Hierarchy EditorLoop : 에디터 상에서만 사용되는 퍼포먼스 최적화 측면에서는 전혀 고려하지 않아도 됨 PlayerLoop : 프로그래머가 직접 조작하는 부분들 최적화 측면에서 고려해야 하는 부분 해당 부분을 분석해야 함 프로파일러 분석하는 법 오브젝트를 회전시키는 스크립트가 아래처럼 존재한다. 해당 스크립트는 Update 함수에..

article thumbnail
[C++] 백준 22856 - 트리 순회
Algorithm/BOJ 2023. 2. 9. 15:30

문제 이해 단계 https://www.acmicpc.net/problem/22856 이진트리에서 왼쪽노드 -> 자기 -> 오른쪽 노드 순으로 방문하는걸 중위 순회라고 한다. 그래서 원래 중위 순회는 제일 왼쪽 노드에서부터 출발하는데, 여기 문제에선 조금 다르다. 해당 문제에서는 무조건 루트 노드인 1에서 출발한다고 가정하고 이동을 거쳐 중위순회를 흉내 내는 것이다. 이때 움직였던 모든 이동 횟수를 구하는 문제 문제 접근 단계 필요한 정보 찾기 일단 노드 1개의 관점에서 바라보자. 각 노드의 관점에서 몇 가지의 정보가 있을까? 총 4개가 있다. 해당 노드의 번호, 왼쪽 자식 노드의 번호, 오른쪽 자식 노드의 번호, 부모 노드의 번호 그리고 중위순회를 할 때 필요한 정보를 생각해 보자. 중위 순회를 할 때는..

article thumbnail
[C++] 백준/BOJ - 2961 : 도영이가 만든 맛있는 음식
Algorithm/BOJ 2023. 2. 7. 23:41

문제 이해 단계 재료의 개수 N개가 주어지고 각 재료마다의 쓴맛과 단맛 정보가 주어진다. 쓴맛은 쓴맛끼리 곱연산을 하고 단맛은 단맛끼리 합연산을 해서 (총 쓴맛 - 총 단맛) 해서 최대한 절댓값이 작은 수를 구하는 문제. 문제 접근 단계 일단 문제 조건에서 봐야 할 점은 재료 N이 최대 10개까지만 있다는 점이다. 10개밖에 안되기 때문에 브루트포스가 가능하고, 시간적인 부담이 적다는 것을 알 수 있다. 우선 구해야 하는 것이 뭔지부터 살펴보자. 구하자고 하는 것은 연산의 결과인데, 크게 보면 N개의 재료 중에서 몇 가지를 골라서 그 안에 값을 계산하는 것이다. 여기서 중요한 점은 몇 가지라는 점, 1개가 될 수도 있고 2개가 될 수도 있고 전부가 될 수도 있는 것이다. 그래서 뭔가 공식을 세우거나, 재..

article thumbnail
[Unity 3D] 팝업시스템(2) - 버튼 기능 구현(싱글톤, 델리게이트 활용)
Unity Study/Concept 2023. 2. 6. 23:17

버튼을 누르면 실행될 함수를 만들기 위해 PopUpManager.cs라는 스크립트를 따로 만들 것이다. 해당 스크립트에는 팝업버튼이 해야 하는 기능 (팝업 닫기, 왼쪽 버튼 눌렀을 때, 오른쪽 버튼 눌렀을 때 등)으로 구성되어 있다. PopUpManager.cs 기본 설정 - 싱글턴 패턴 public class PopUpManager : MonoBehaviour { // 싱글턴 패턴 ~~~~~~~~~~~~~~~~~~~~~~~~ private static PopUpManager _instance; public static PopUpManager Instance { get { return _instance; } } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public GameOb..

article thumbnail
[C++] 백준/BOJ - 20207 : 달력
Algorithm/BOJ 2023. 2. 6. 15:58

문제 이해 단계 https://www.acmicpc.net/problem/20207 문제가 헷갈리게 적혀있어서 풀면서 문제를 이해하였다. 이런 문제는 좀 예시를 명확히 줬으면 좋겠다. N개의 (시작일자, 종료일자)로 이루어진 블록이 들어오는데 이는 1 ~ 365 사이의 숫자로 이루어져 있다. 이를 열이 365까지 있는 2차원 맵에 1부터 채우는데 블록의 배열은 다음과 같은 규칙을 가진다. 1. 최대한 위쪽부터 채운다. 2. 각기 다른 블록의 시작과 끝이 연속(4,5,6) 이렇게 된다면 무조건 같은 라인(열)에 둔다. 3. 시작일이 같은 경우 긴 것부터 먼저 배열한다. 그리고 우리가 해야 하는 것은 코팅지의 길이를 정하는 것인데, 코팅지는 블록 전체를 감싸는 직사각형으로 만드는 것이다. 근데 이걸 또 최소..