전체 글 386

백준 골드2 1167 트리의 지름 구하기

https://www.acmicpc.net/problem/1167 트리의 지름이라서 어떻게 구할까 했는데,그냥 가장 긴 경로를 찾으면 된다. 임의의 노드 하나를 정해서BFS로 탐색하면 그 중에서 가장 긴 노드를 찾아 그 노드 값을 저장한다.어떤 정점까지가 더 긴가는,해당 정점 수 만큼의 거리를 담은 배열로 비교한다. 가장 긴 경로를 가진 정점을 구했으면,가장 긴 경로를 가진 정점에서 다시 출발한다.거리를 담은 정점 배열에서,도착지까지 가장 길었던 값을 가져오면해당 정점의 최대 길이를 알 수 있다. 이 최대 거리가 트리의 지름이다. using namespace std;vector visited;vector mDistance;typedef pair edge;vector> tree;void BFS(int n..

인터페이스를 사용하기 쉽게 설계하기 (2)

필요한 기능 빼먹지 않기필요한 기능을 빼먹지 않는 원칙은두 단계로 적용한다.첫 번째는 클라이언트가 필요로 하는 동작은모두 인터페이스에 추가해야한다.간혹 포함시켜야할 지 불분명한 기능이 있다.이럴 때는 자신이 작성한 코드를 클라이언트가이용하는 모든 경우의 수를 따져봐야한다.인터페이스를 설계할 때 한 가지 관점만 고려하면다른 방식으로 바라보는 클라이언트가 필요한 기능을 놓칠 수 있다.물론 가능한 모든 경우의 인터페이스를 설계한다는 것이불가능에 가깝다.두 번째 인터페이스에 최대한 많은 기능을 구현하는 것이다.라이브러리에서 해결할 수 있거나그러나,인터페이스를 다르게 설계하면 알 수 있는 정보를클라이언트 코드에서 지정하도록 구현하면 안된다.또한 라이브러리의 결과를 합치는 데필요한 일을 클라이언트에게 떠넘기면 안된다.

인터페이스를 사용하기 쉽계 설계하기 (1)

직관적으로 구현하기인터페이스는 사용하기 쉽습니다.이 말은 쉽게 할 수 있도록 구성해야 하지 않을 것입니다.인을 간단하고 간단하게 사용하기 쉽습니다.여러분이 일하는 활동을 하는 데필요한 데이터 구축 하나를 적용하기 위해소스코드를 따라가거나,원하는 기능을 구현하는 코드가 너무 중요합니다.사용하기 쉬운 터터를 개발하기 가장 좋은 방법은사용자에게 있어서의 기준을 결정하는 것입니다.과거에 사용된 것과 유사한 인터페이스는 파악하기 쉽고 즉각적으로 활동할 수 있습니다.기분 나쁘게 행동할 가능성이 있습니다. 늘 사용자의 입장에서 인터페이스를 고려해야 한다.상식에 맞는지, 사용자가 충분히 예상할 수 있는지 따져봐야한다.물론 혁신도 중요하지만혁신은 인터페이스가 아닌 내부 구현 기술에서 추구해야 한다.예를 들어 소비자는일부..

인터페이스 목적 별 용도 고려하기

인터페이스 설계 유의사항1. 인터페이스 목적 별 용도 고려하기2. 인터페이스를 사용하기 쉽게 설계하기 - 익숙한 방식 따르기3. 인터페이스를 사용하기 쉽게 설계하기 - 필요한 기능 빼먹지 않기4. 인터페이스를 사용하기 쉽게 설계하기 - 군더더기 없는 인터페이스 제공하기5. 인터페이스를 사용하기 쉽게 설계하기 - 문서와 주석 제공하기APIAPI는 제품의 기능을 다양한 용도로 활용하거나그 제품의 기능을 확장하기 위해외부에 제공하는 인터페이스이다.내부 인터페이스가 일반 계약서라면API는 법전에 명시된 법률에 가깝다.일단 외부에서 사용자가 우리가 제작한 API를 사용하기 시작하면,특별히 도움되는 기능을 새로 추가하지 않는 한변경하지 않는 것이 좋다.따라서 API를 결정하기 전에 신중하게 설계하고고객이 원하는 바..

STL Map

map이란?맵은 딕셔너리 구조를 가진다.키를 통해서 값을 가져온다. 키와 값을 쌍으로 저장한다.C++ map은 자동 정렬되는 컨테이너이다.이진 탐색 트리 오름차순 기반이다. // 맵만들기 예시int mian(){ std::map simpleScoreMap; // 삽입 방법 1 simpleScoreMap.insert(std::pair("Mocha", 100)); simpleScoreMap.insert(std::pair("Coco", 50)); // 삽입 방법 2 || 이 방법은 접근 방법이기도 하다 simpleScoreMap["Mocha"] = 0; std::cout 맵도 복사 생성자가 있을까? 있다.맵의 복사 생성자 작성법// 복사 생성자를 ..

병음이 비슷해 헷갈리기 쉬운 중국어 단어

因拼音像是而容易混淆的汉语单词。 wǒ zuìjìn xué shèji我最近学设计。 나는 최근에 디자인을 배워wǒ zuìjìn xué shèjī我最近学射击。 나는 최근에 사격을 배워 둘의 차이는 병음에 있다.병음 한 끗 차이로 문장의 뜻이 달라지니 듣기 시 주의하자. 1. 无数 (wúshù) : 셀 수 없다, 무수하다天空中有无数的行星 tiānkōng zhōng yǒu wúshù de xīngxīng 하늘에는 무수히 많은 별들이 있다.2. 无殊 (wúshū) : 다르지 않다, 별다를 바 없다.他们的想法,都是为了孩子好。 tāmen de xiǎngfǎ wúshū, dōu shì wèile háizi hǎo. 그들의 생각은 별다를 바 없으며, 모두 아이를 위한 것이다.3.武术 (wǔshù) : 무술她从小就开..

취미/HSK 2024.12.01

프로그램 실행과정

프로그램 실행과정프로그램의 실제 실행단계를 살펴보기 위해서,우리가 잘 아는 실행파일의 생성과정을 간략히 정리하고자 한다. 단계 1 : 전처리기에 의한 치환작업위 그림을 보면, 실행파일 생성의 가장 첫 번째 단계가전처리기에 의해서 이뤄짐을 알 수 있다.전처리기는 '#include', '#define'과 같이 '#' 으로 시작하는지시자의 지시에 따라서 소스코드를 적절히 변경하는 작업을 한다. 단계 2 : 컴파일러의 의한 번역단계 1에 의해서 변경된 소스코드는 여전히 C 언어로 구성되어 있어서우리가 눈으로 봐도 이해할 수 있는 내용이다.이제 이 소스코드는 컴파일러에 의해서 어셈블리 코드로 번역된다.어셈블리 코드가 무엇인지 대략은 알고 있을 것이다.CPU가 디자인될 때 CPU에게 일을 시키기 위한 명령어도 함께..

선분과 한 점과의 최단거리 알고리즘

선분과 한 점과의 최단거리는 구해서 어디다 쓸까? 캐릭터가 선로와 출동하는지 판단하는 기능을 구현할 때,공간 분할 기법을 사용하여 검색 범위를 줄일 때 등이 있다.  선분과 점의 위치 관계를 분석하여 3가지 예외상황으로 나누어 풀 수 있습니다. 1.     점 P에서 선분 AB로 수선을 그릴 수 있을 때2.     점 P에서 선분 AB로 수선을 그릴 수 없으며,         점 P가 점 A랑 더 가까울 때3.     점 P에서 선분 AB로 수선을 그릴 수 없으며,        점 P가 점 B랑 더 가까울 때 이 3가지 상황은 AP벡터를 AB벡터에 내적을 이용한 정사영시켜 구분할 수있습니다. AP 벡터와 AB 벡터를 정사영시킨 벡터가 길이 0이하라면점 P는 선분 AB에 수선을 그을 수 없는 상태입니다. ..

쓰레드 기본 사용법

멀티스레드 프로그래밍은 멀티프로세서가 장착된 컴퓨터 시스템에서 중요한 기법이다.멀티스레드 프로그래밍을 이용하면 시스템에 있는 여러 프로세서 유닛을병렬로 사용하는 프로그램을 작성할 수 있다.시스템에 프로세서 유닛이 장착되는 방식은 다양하다.독립적인 CPU 프로세서 칩이 여러 개 달려 있을 수 있고,한 프로세스 칩 안에 코어라 부르는 독립 CPU가 여러 개 있을 수 있고,또 어떤 시스템은 두 가지 방식이 혼합되기도 한다.이렇게 프로세스 유닛이 여러 개 달린 프로세서를 흔히 멀티코어 프로세서라 부른다.사실 이렇게 프로세서가 여러 개 달린 시스템이 나온지 꽤 오래되었지만이제는 서버부터 개인용 컴퓨터, 심지어 스마트폰에 이르기까지 거의 모든 시스템이멀티코어 프로세서를 사용한다.이처럼 멀티코어 프로세서가 보변화되었..