howudong의 등록된 링크

 howudong로 등록된 티스토리 포스트 수는 428건입니다.

[스파로스 4기] 4~6주차 회고 - 1차 프로젝트 진행 현황 및 근황 [내부링크]

서론 모든 팀들이 본격적으로 프로젝트 개발에 들어갔다. 생각보다 내가 부족한 부분이 많아서 속도가 다른 팀원들만큼 안 나서 마음이 급급했다.. 그래서 블로그도 바빠서 잘 못썼다.. 원래는 트러블 슈팅이다 뭐 다해서 쓸게 엄청 많은데, 일정에 쫓긴다고..ㅠ 이번 포스팅에서는 주로 지난 3주간 했던 것에 대해 이야기하고, 스파로스를 통해 배웠던 것에 대해 이야기하겠다! 강사님께서 특별히 빌려주신 애플 모니터.. 처음 써봤는데 좋더라.. 지금도 감사히 잘 쓰고 있다..! 프로젝트 진행 Git Action을 통한 CI/CD 구축 Git Action을 사용한 CI/CD를 구축해 본 경험이 있어서, 우리 팀에서는 내가 인프라를 담당하게 됐다. 근데 또 예전에 했던 그대로 할 수 없지 않은가.. 더 발전시키고 싶었다..

[스파로스 4기] 2~3주차 회고 - 팀 프로젝트 설계 문서 작성 및 팀 리뷰 [내부링크]

서론 스파로스 아카데미 4기에 합격한 뒤, 평일 9 to 6 교육을 들은 지 벌써 3주가 지났다. 출입증도 받았다..! 원래는 각 주차마다 회고를 쓸 생각이었는데, 2주 차에 평일 휴일이 많이 겹쳐서 3일밖에 안 가서 회고를 적을 껀덕지가 없었다. 그래서 2 ~ 3 주차를 합쳐서 포스팅을 한다!! 본문에는 2주 동안 있었던 특별한 이벤트(?) 나 설계 관련된 이야기를 주로 하겠다. 백엔드 스킬업 2 ~ 3주 차 오전에는 기술 역량 향상을 위한 스킬업 시간을 가졌다. 강사님께서 강의를 해주는 형식으로, 격일 단위로 프런트 엔드, 백엔드 기술을 번갈아가면서 배웠다. 나는 백엔드 분야이기 때문에 해당 포스팅에는 백엔드와 관련된 포스팅만 하겠다! Spring Data JPA MyBartis 대신 JPA에 대해 ..

[스파로스 4기] 1주차 회고 - 스타트 캠프 [내부링크]

화요일에는 간단한 입학식 및 여러 가지 안내를 받고, 노트북 및 웰컴 선물(?)을 받았다. 본격적인 부트 캠프는 수요일부터 시작됐는데, 이번주는 스타트 캠프 주간으로, 기술을 배운다라기보다는 프로그래밍 설계, 팀 협업, 팀 빌딩과 같은 교육이 주를 이루었다. 이번주에 한 것은 아래와 같다. 디자인 띵킹(Design Thinking) 이벤트 스토밍(Event Storming) 현업자에게 배우는 Git CLI 오프라인 강의 1차 프로젝트 팀 빌딩 프로젝트 설계 및 팀 빌드업에 관한 것이었다. 이 중, Design Thinking과 Event Storming에 대해 자세히 후기를 남겨보겠다. Design Thinking 1. 롤플레잉 진행 가장 처음으로 한 활동이다. 이건 교육이라기보다는 활동이라고 하는 게 ..

부산 스파로스 아카데미 4기 백엔드 합격 후기 [내부링크]

올해 2월, 부산 신세계 I&C에서 스파로스 아카데미 4기를 모집하였다. 실무형 SW 교육 프로그램, 프로젝트 중심의 교육 과정이 마음에 들어 지원하게 됐다. 모집 인원이 프론트엔드 + 백엔드 30명밖에 안 돼서 뽑히기 쉽지 않을 것 같았는데.. 운 좋게 합격했다.. 간략한 요약을 좋아하시는 분들을 위해 내 정보와 선별 과정에서의 행적을 적어두겠다. 본인 이력 합격 분야 -> 백엔드 부산 소재 대학 컴퓨터공학과 졸업 3년 동안 게임개발 진행하다 작년 5월부터 백엔드 개발 전향 내세울만한 거 백엔드로써 프로젝트 경험 1개 우테코 프리코스 진행(만 했음) 블로그 운영 중인 게 최대 자랑거리 선별 과정 행적 코딩 테스트 = 3문제 중 3문제 품 인터뷰 = 진짜 말아먹음 선별 절차 서류 전형 코딩 테스트 최종 ..

[Java/C++] 프로그래머스 Level 2 - 아날로그 시계 (PCCP 기출문제 2번) [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/250135 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 이해 자체는 되게 간단했는데, 풀려면 수학적인 계산이 좀 필요했다. 솔직히 설명 없이 코드만 적혀있으면, 왜 이렇게 풀었는지 전혀 모를 거 같다. 썸네일 더보기 문제 핵심 및 풀이 각도의 관점으로 접근 이 문제에서 바라는 것은, 초침이 각각 시침과 분침과 겹치는지를 판단하는 것이다. 이를 알아내기 위해서는 어떻게 해야 할까? 특정 시간만으로 판단할 순 없다. 왜냐하면 초침이 움직..

[Java/C++] 프로그래머스 Level 3 - 수레 움직이기 (PCCP 기출문제 4번) [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/250134 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 최근에 나온 따끈따끈한 문제. 생각할 경우의 수가 많다 보니까, 빡구현 문제에 속하는 것 같다. 1시간 제 한 시간 안에는 푸는 것에는 실패했지만, 인터넷 도움 없이 스스로 풀어냈다. 문제 핵심 및 풀이 제한사항을 통해 유형 파악 제한사항을 통해 문제의 유형을 파악하는 것이 첫 번째 관문이라고 생각한다. N x M 맵의 최대 크기를 살펴보면, 아무리 커봤자 4 x 4 가 최대 크기이다..

UTM을 통한 amd64.iso 이미지 생성 오류 해결법 (MAC OS) [내부링크]

발생한 오류 MAC 운영체제는 arm 기반이라서, 일반적인 가상머신을 사용하더라도 amd iso 이미지는 생성하지 못한다. 그러나 UTM 가상머신은 QEMU을 통해 amd iso 이미지 파일을 Mac 운영체제에서도 실행가능하게 해 준다. 그런데.. 아마 이런 화면이 뜨면서 부팅이 제대로 안될 수도 있다. (필자는 vyos_amd64.iso 이미지를 생성하려다가 실패했다.) 이론상으론 분명 생성돼야 하는데.. 가상머신도 바꿔보고, 검색도 해보고 했는데.. 아무것도 안 나왔다. 한 5시간을 헤맸다. 결국엔 스스로 해결했다. 오류 해결법 우선 amd64.ios 이미지를 생성하고자 가상 머신의 Edit에 들어간다(오른쪽 마우스 클릭) 물론 구동을 멈춘 상태여야 한다. 이제 QEMU -> UEFI Boot의 체크..

[Java/C++] 프로그래머스 Level 2 - 석유 시추(PCCP 기출문제 2번) [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr PCCP가 뭔진 모르겠는데, 갑자기 이와 관련된 기출문제가 많이 뜨더라. 그래서 하나 풀어봤다. 문제 이해 자체는 간단하고, 범위도 그렇게 넓지 않아서 쉽게 풀릴 줄 알았다. 근데 시간초과가 떠서 좀 애먹었다. 문제 핵심 및 풀이 석유 그룹화 해당 문제의 핵심은 상하좌우로 연결되어 있는 석유를 하나의 덩어리로 보는 것이다. 이는 land [][]의 값이 1인 곳부터 시작하여, 상화좌우..

[Java/C++] 프로그래머스 Level 3 - 공 이동 시뮬레이션 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/87391?language=java 오랜만에 풀어본 프로그래머스 Level 3 문제. 1시간 제한시간을 두고 풀었는데, 로직만 생각하다가 결국에 실패했다. 끝나고도 천천히 고민해 봤지만 마땅히 답이 떠오르지 않아, 여러 정보를 참고해 봤다. 개인적으로 이 문제는 수학적인 센스를 요구하는 문제인 것 같다. 어떻게 이런 생각을 하지.. 문제 핵심 및 풀이 문제 제한 사항 잘 파악하기 문제만 읽어보면 단순한 BFS 혹은 완전 탐색 시뮬레이션이라고 생각하기 쉽다. 하지만 제한사항을 보면 절대 그렇지 않은 것을 확인할 수 있다. n과 m의 범위, 그러니까 행과 열의 개수가 모두 10^9까지 가능하다...

[Java/C++] 프로그래머스 Level 3 - 에어컨 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/214289 2023 현대 모비스 알고리즘 대회 예선에서 올라온 문제다. 프로그래머스에 카카오 기출 말고 다른 기업 것을 풀어보는 건 처음이었는데, 확실히 유형이 다르다는 것을 느꼈다. 문제가 나온 지 얼마 안 돼서 푼 사람이 70명 남짓밖에 되지 않았다. 그래서 참고할만한 인터넷 글은 없었는데, 다행히 질문 글에 해설 글을 참고하여 풀 수 있었다. 그렇게 여차저차 2일 만에 문제를 해결했다. 문제 핵심 및 풀이 희망 온도 마치 중요한 것처럼 적혀있지만, 희망온도라는 키워드에 속지 않도록 해야 한다. 문제 설명에서 보면 "희망 온도는 에어컨의 전원이 켜져 있는 동안 원하는 값을 변경할 수 있..

[Java/C++] 프로그래머스 Level 2 - 빛의 사이클 경로 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/86052 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 정답률이 왜 이렇게 낮나 했더니, 문제 이해하기가 난해했다. 진짜 친구랑 둘이서 푸는데, 문제 해석으로 토론할 줄은 몰랐지.. 솔직히 깔끔한 문제는 아니었다고 생각했다. 문제 핵심 및 풀이 '빛의 경로 사이클'에 대한 정의 이 문제의 핵심이자 가장 애매했던 부분이다. 문제에서는 빛의 경로 사이클을 "빛이 이동하는 순환 경로를 의미"한다고 정의했다. 진짜 딱 이 한 문장이라 나머지는 예제..

[우테코 6기 프리코스] 4주차 - 크리스마스 프로모션 리뷰 및 회고 [내부링크]

Git repository https://github.com/howudong/java-christmas-6-howudong 4주 차 후기 4주 차는 지금까지 했던 어떤 미션과는 요구사항이 복잡했다. 그리고 요구사항을 과제식으로 설명한 것이 아니라, 클라이언트가 기능을 요청하는 방식을 사용했다. 그러다 보니 뭔가 미션을 위한 문제라기보다는 실제 서비스 개발이라는 느낌이 강했다. 이번에는 내가 실무자라는 느낌으로 미션에 임했다. 클라이언트에게 프로그램을 전달하고, 협업을 위해 할 수 있는 설계를 하기 위해 노력했다. 또한 기능이 실제로 확장될 수 있고 프로그램이 유지보수가 된다는 점을 생각했다. 도메인 설계 다이어그램 이번 주차의 핵심이라고 할 수 있는 도메인의 다이어그램이다. 값 객체(Value Objec..

[우테코 6기 프리코스] 3주차 - 로또 코드 리뷰 및 회고 [내부링크]

repository https://github.com/howudong/java-lotto-6/tree/howudong 3주 차 소감 요구사항이 복잡해지기 시작한 것 같다. 확실히 1~2주 차는 맛보기였다.. 이번 주차에는 입력과 출력에 필요한 도메인 정보들이 다르다. 그래서 처음으로 DTO를 적용시켜 봤다. DTO라는 개념 자체는 간단하지만 이를 직접 사용한다는 것은 간단하지 않았다. 'DTO로 어디서 바꿔줘야 하는가?', '이를 효율적으로 사용하기 위해선 어떻게 해야 하는가?' 이런 것들을 고려하는 데에 개인의 주관이 많이 들어갔다. DTO로 변환시켜 주기 위한 service 계층을 사용하다 보니, 자연스럽게 프로그램 규모가 커지고 복잡해지기 시작했다. 이럴 때일수록 중요한 것이 객체지향적인 설계라고 ..

[우테코 6기 프리코스] 2주차 - 자동차 경주 코드 리뷰 및 회고 [내부링크]

https://github.com/woowacourse-precourse/java-racingcar-6/pull/149 2주 차를 마치고 느낀 점 구현 난이도는 1주 차보다 높진 않았던 것 같다. 오히려 1주 차보다 낮은 느낌을 받았다. 그런데 객체지향적 설계 같은 여러 가지 조건을 고려하다 보면, 이 미션 생각보다 까다롭다. TDD를 처음으로 적용해 봤는데, 확실히 좋더라. 클래스의 역할 분리가 명확하게 되고, 더욱 견고하게 만들어지는 느낌이다. 무엇보다도 오류가 훨씬 적어져서, 오류 색출에 걸리는 시간이 대폭 줄어들었다. 순조롭게 진행을 하다가, 마지막 날에 큰 리팩토링을 해버리는 바람에 애를 먹었다. 코드를 고치는 건 괜찮은데, 테스트 코드를 옮기고 하는 게 진짜 괴롭더라... 오히려 괴로워하다 보..

[Java 8+] Map 효율적인 메서드 : compute, computeIf~, putIfAbsent [내부링크]

Java에서 Map을 사용하다 보면 로직을 처리하는데 함수 호출이 잦아지는 경우가 많아 코드를 한눈에 알아보기가 힘들다. 그래서 Map interface 중 Map 사용을 간결하게 하도록 돕는 함수에 대해 알아봤다. 이번 포스팅에서 소개할 메서드는 compute() computeIfAbsent() vs putIfAbsent() computeIfPresent() 이다. 소개도 나와있는 순서대로 하겠다. compute 동작 compute(K key, BiFunction

[우테코 6기 프리코스] 1주차 - 코드 리뷰 전에 나 혼자 회고 [내부링크]

Repository 주소 https://github.com/howudong/java-baseball-6/tree/howudong GitHub - howudong/java-baseball-6 Contribute to howudong/java-baseball-6 development by creating an account on GitHub. github.com 다이어그램 domain 다이어그램 설계 domain과 view의 연관관계 다이어그램 domain과 view과 서로 연관관계없이 잘 만들어진 모습을 확인할 수 있다. 컨트롤러만 빼고 보면 서로 모르게 잘 만들진 것 같은데.. 컨트롤러를 포함해서 생각해야 하나? 컨트롤러를 포함하면 그림이 좀 복잡해져서 연관관계를 파악하기 어려워진다. 일단 내가 할 수 ..

[Network] 일반화된 포워딩 : OpenFlow - 매치 플러스 액션의 개념과 예시 [내부링크]

매치 플러스 액션 ‘매치’와 ‘패킷’으로 이뤄진 2단계의 목적지 기반 포워딩 매치(match) 목적지 IP 주소를 찾는 것 프로토콜 스택의 다른 계층에서 다른 프로토콜과 관련된 여러 헤더 필드에 대해 ‘매치’ 수행 가능 액션(action) 매치 이후, 패킷을 스위치 구조로 지정된 하나 이상의 출력 포트로 전송하는 것 이는 목적지 기반 포워딩과 같은 역할 인터페이스에서 나가는 패킷을 로드 밸런싱(load balancing) 한 후, 헤더값을 다시 쓰는 역할 의도적으로 패킷을 차단/삭제 및 추가 처리 작업을 위해 특수 서버로 패킷을 보내는 작업을 함 패킷을 차단/삭제하는 것은 방화벽과 같은 기능 추가 작업 처리는 DPI와 비슷한 동작 매치 플러스 액션 테이블 매치 플러스 액션 테이블은 원격 컨트롤러를 통해 ..

[Network] IPv6: 개발 배경과 데이터그램 포맷 변화 분석, IPv4에서 전환 [내부링크]

IPv6 개발 배경 1990년대 초에 IETF는 IPv4 프로토콜의 다음 버전을 개발하기 시작 IPv4 주소 공간이 고갈되기까지는 아직 상당히 시간이 남았지만, 광범위하게 새로운 기술을 구축하기에는 상당히 시간이 필요하기 때문에 이때 시작됨 IPv6 개발의 주된 동기 → 32비트 IPv4 주소 공간이 인터넷에 접속하는 서브넷과 노드들로 인해 빠른 속도로 고갈 진행 중 → 큰 IP 주소 공간의 필요성을 인식하여 새로운 IP 프로토콜인 IPv6가 개발됨 IPv6 개발자들은 IPv4의 축적된 운용 경험에 근거하여 IPv4의 다른 면을 확장하고 축소하였음 IPv6 데이터그램 포맷 IPv6에 도입된 중요한 변화 1. 확장된 주소 기능 IPv6는 IP 주소 크기를 32비트에서 128비트로 확장 → IP 주소가 고갈..

[Network] NAT 가능 라우터의 개념과 특징(+ NAT 변환 테이블) [내부링크]

NAT(네트워크 주소 변환)이 필요하게 된 배경 SOHO(small office, home office) 네트워크의 확산 →ISP는 SOHO에 관한 LAN 설치 시, 모든 SOHO의 IP 장치를 수용할 수 있는 주소 범위를 할당해야 함 SOHO의 IP 장치 - 전화, 태블릿, 게임 장치, IP TV, 프린터 등 네트워크가 현저히 커지면 큰 주소블록이 할당되어야 하는데, 이러면 다양한 케이스의 문제 발생 ISP가 할당해야 하는 SOHO 네트워크의 해당 주소 범위에 인접 부분을 할당한 경우 특정 홈 네트워크 소유자가 IP 주소가 어떻게 관리되는지 알고자 하는 경우 이런 상황에서 네트워크 주소 변환(NAT)으로 주소를 할당할 수 있다. NAT 가능 라우터 NAT 가능 라우터는 홈 네트워크의 일부인 인터페이스를..

[Network] 호스트, 서브넷의 IP 주소 할당 : 주소 블록과 DHCP [내부링크]

주소 블록 획득 기관의 서브넷에서 IP 주소 블록을 사용해야 하기 때문에 주소 블록을 획득해야 한다. 이를 위해 네트워크 관리자는 이미 할당받은 주소의 큰 블록에서 주소를 제공하는 ISP와 접촉 ISP와 접촉하여 주소 블록을 할당받는 예시 가정 ISP가 주소 블록 200.23.16.0/20을 할당받았다고 가정 ISP의 동작 이 주소 블록을 작은 주소 블록 8개로 나누고, 이것으로 8개 조직을 지원할 수 있다. ISP가 주소 블록을 얻는 방법 ISP도 주소 블록을 다른 곳에서 얻어야 한다. IP 주소 공간을 관리하고 ISP와 다른 조직에 주소 블록을 할당하는 최상위 국제기관이 존재 → 이러한 IP 주소는 ICANN 기반으로 관리 ICANN(Internet Corporation for Assigned Nam..

[Java/C++] 프로그래머스 Level 3 - 미로 탈출 명령어 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/150365 [2023 KAKAO BLIND RECRUITMENT]에 나왔던 문제. 카카오의 최신 출제 트렌드를 파악하지 못한 나의 잘못이 컸다. 그걸 알았다면 처음에 잘못 접근하지 않아서 시간을 잡아먹지 않았을 것이다.. 지금 생각해 보면 당연한 건데, 왜 헛다리 짚었을까? 문제 핵심 및 풀이 핵심 파악 이 문제에서 핵심은 도착점까지 가장 빠른 경로를 찾는 것이 아니라, 무조건 k 횟수를 움직여야 한다는 점이다. 가장 빨라야 하는 것은 경로가 아닌 움직인 경로의 문자열 사전순이다. 상하좌우를 각각 'u' , 'd' , 'l' , 'r'로 나타낸다. 각 방향마다 문자가 정해져 있다는 것은, ..

[Network] IPv4 주소체계와 서브넷 주소 체계(CIDR, Class) [내부링크]

인터페이스 인터페이스(Interface) : 호스트와 물리적 링크 사이의 경계를 뜻함 인터페이스와 라우터 라우터는 2개 이상의 연결된 링크가 필요 → 라우터는 이런 링크 사이의 경계 또한 인터페이스라 함 라우터가 2개 이상의 연결된 링크가 필요한 이유 → 라우터 작업은 한 링크로부터의 데이터그램을 다른 링크로 전달하는 것이기 때문 각 링크마다 하나의 인터페이스를 갖고, 라우터는 여러 개의 인터페이스를 가진다. IP주소와 인터페이스 모든 호스트와 라우터는 IP 데이터그램을 송수신 가능 → IP는 각 호스트와 라우터 인터페이스가 IP 주소를 갖도록 요구 → 기술 측면에서, IP 주소는 인터페이스 자체와 관련이 있다. 인터페이스를 포함하는 호스트 라우터보다 인터페이스와 더 관련 있다는 뜻 IP주소의 표기 각 ..

[Network] IPv4 데이터그램 포맷의 구성 및 주요 필드 정리 [내부링크]

IPv4 데이터그램 포맷 및 주요 필드 IP 데이터그램은 총 20바이트의 헤더(옵션이 없다고 가정)를 갖는다. 데이터그램이 TCP 세그먼트를 전송할 경우 단편화되지 않은 각 데이터그램은 애플리케이션 계층 메시지와 함께 총 40바이트의 헤더를 전송 IP헤더 20 + TCP 헤더 20 버전 정보 4비트로 데이터그램의 IP 프로토콜 버전을 명시한다. 라우터는 버전 번호를 확인하여 데이터그램의 나머지 부분을 어떻게 해석할지 결정 헤더 길이 IPv4 데이터그램은 헤더에 가변 길이의 옵션을 포함 → 해당 4개의 비트로 IP 데이터그램에서 실제 페이로드가 시작하는 곳을 결정 페이로드(payload) : 전송되는 데이터 자체를 뜻함 예시 - 데이터그램에 캡슐화된 트랜스포트 계층 세그먼트 대부분의 IPv4 데이터그램은 ..

[Network] 패킷 스케줄링의 다양한 방식 정리 [내부링크]

패킷 스케줄링 큐에 있는 패킷이 출력 링크를 통해 전송되는 순서를 결정하는 방식 다양한 방식이 존재 FCFS(First-Come-First-Served) 라우터에서 일반적으로 사용되는 큐잉 처리 방법 흔히 FIFO(First-In-First-Out)으로 알려져 있음 FIFO 링크 스케줄링의 원리 링크가 현재 다른 패킷을 전송 중인 경우, 출력 링크 큐에 도착한 패킷은 전송을 기다림 패킷이 출력되는 링크를 통해 완전히 전송되면, 큐에서 제거됨 패킷이 링크를 통해 완전히 전송된다 → 서비스를 받는 경우라는 뜻 도착한 패킷을 담을 버퍼 공간이 충분하지 않은 경우 → 공간 확보를 위해 큐의 패킷 폐기 정책 사용 패킷 손실 여부 또는 다른 패킷을 큐에서 제거할 것인지 여부를 결정 아래에서의 FIFO 가정은 패킷 ..

[Java/C++] 프로그래머스 Level 3 - 파괴되지 않는 건물 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/92344#qna 알고리즘 스터디 끝나니까 자연스럽게 알고리즘을 안 풀게 되네.. 하루에 하나는 아니더라도 주 3회 정도는 꾸준히 풀어야 하는데, 일주일 만에 푸는 것 같다. 알고리즘에 좀 더 신경 써야겠다. 문제 핵심 및 풀이 쉬운 문제? 문제 이해는 쉽다. 그리고 푸는 방법도 보기엔 간단해 보인다. 그냥 (r1, c1) ~ (r2, c2) 직사각형에 포함된 모든 인덱스에 degree를 더해주면 된다. 근데 이 문제의 제한사항을 보면 그 사용은 사용하지 못하는 것을 알 수 있다. 행과 열의 크기는 최대 1,000까지 가능하다. 즉 1000*1000 짜리 맵이 나올 수 있다. 또한 처리해야 ..

[Network] 스위치 구조 : 입/출력 큐잉의 발생 원인 및 버퍼링의 사용 [내부링크]

큐잉과 패킷 손실 패킷 큐는 입력 포트와 출력 포트 모두에서 형성 가능 큐의 위치와 범위(입/출력 포트 큐)에 영향을 주는 요인 트래픽 로드 스위치 구조의 상대 속도 및 라인 속도 큐가 커질수록 소모되는 메모리의 양이 많아짐 → 도착하는 패킷을 저장할 수 있는 메모리가 없을 때 패킷 손실(packet loss) 발생 패킷 손실 시나리오 가정 입력 및 출력 라인의 속도(전송률)은 모두 초당 R(line) 패킷으로 동일 N개의 입력 포트와 N개의 출력 포트가 존재 모든 패킷의 고정 길이가 같고,동기식으로 입력 포트에 도착 임의의 링크 상에서 패킷 송신 시간과 수신 시간은 동일 시간 간격 동안 0 또는 하나의 패킷이 입력 링크상에 도착 가능 R(switch) : 패킷이 입력 포트에서 출력 포트로 이동할 수 있..

[Java/C++] 프로그래머스 Level 3 - 보행자 천국 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/1832 2017년도 그러니까 6년 전쯤에 카카오 코딩 테스트에서 나온 문제 현재의 카카오 코딩테스트 출제 스타일이 다른 느낌 요즘은 DP 잘 안 나온다던데.. 문제 핵심 및 풀이 DFS나 BFS로 풀면 시간초과 아직까지 이해가 가지 않는 부분이다. DFS의 최적의 시간복잡도는 O(V+E)이다. 그래서 문제 조건상 최대 500 * 500 * 2이기 때문에 DFS를 돌려도 시간초과가 뜰 리가 없다고 생각했다. 그런데 해당 방법은 시간초과가 뜨고 다른 방법을 사용해야 했다. 내 상식으로는 이해할 수가 없는데.. 아시는 분..? DP로 문제 접근 두 번째로 생각해 볼 수 있는 가능성은 DP였다. ..

티스토리 사진 비율 바꾸는 쉬운 방법(원본 손실X) [내부링크]

썸네일 1:1 비율 썸네일이 제대로 보이기 위해서는 썸네일 사진을 1:1 비율로 바꿔야 한다. 이러한 작업은 엄청 귀찮다. 그래서 여러 가지 방법을 사용해 봤다. 여러 실험을 통한 결과, 아래에 서술할 방법이 가장 편하고 쉬운 것 같아서 소개한다. 작업 환경 본 포스팅은 맥북 기준으로 작성되었다. 하지만 스크린샷 기능만 있으면 돼서 윈도나 Mac이나 상관없다. 프로그램도 스크린샷을 찍을 수 있는 것만 있다면 그 외에는 아무것도 필요 없다. 어차피 비율 조절하는 작업은 티스토리 내에서 할 것이다. 유의 사항 이 방법은 원하는 게시물의 썸네일 비율을 변경하는 것에 유용한 것이다. 그러니까 티스토리 맞춤형이기 때문에 다른 쪽에서는 이게 편할지 어떨지 모르겠다. 비율 조절하는 방법 1. 비율 조절하고자 하는 사..

[Network] 라우터 핵심 : 스위치 구조의 3가지 스위칭 기술 정리 [내부링크]

스위칭 스위치 구조가 라우터의 핵심인 이유 → 패킷이 입력 포트에서 출력 포트로 실제로 스위칭(포워딩)되는 구조를 통과하기 때문 세 가지 스위칭 기술 1. 메모리를 통한 교환 CPU(라우팅 프로세서)를 직접 제어해서 입력 포트와 출력 포트 사이에 패킷 스위칭을 하는 방법 가장 단순한 초기의 라우터이자 사용한 전통적인 컴퓨터 입력 포트와 출력 포트는 전통적인 운영체제에서 전통적인 I/O 장치처럼 작동 동작 과정 패킷이 도착하면 입력 포트는 라우팅 프로세서에게 인터럽트를 보냄 패킷을 프로세서 메모리에 복사 라우팅 프로세서는 헤더에서 목적지 주소를 추출 및 포워딩 테이블에서 적절한 출력 포트를 찾음 이후, 라우팅 프로세서는 다음 패킷을 출력 포트의 버퍼에 복사한다. 메모리 대역폭이 초당 최대 B인 패킷을 메모..

[Network] 라우터의 입력/출력 포트 기능과 목적지 기반 전송 요점 [내부링크]

입력 포트 처리 입력 포트의 라인 종단 기능과 링크 계층 처리 → 라우터의 개별 입력 링크와 관련된 물리 계층 및 데이터 링크 계층을 구현 입력 포트에서 수행되는 검색 ← 라우터 동작의 핵심 포워딩 테이블을 사용하여 도착 패킷이 스위치 구조를 통해 전달되는 출력 포트를 검색 포워딩 테이블의 사용 및 갱신 포워딩 테이블은 라우팅 프로세서에서 계산되거나 갱신됨 또는 원격 SDN 컨트롤러에서 수신됨 위의 라우팅 프로세서는 다른 네트워크 라우터의 라우팅 프로세서와 상호작용하기 위해 라우팅 프로토콜을 사용한다. 포워딩 테이블은 라우팅 프로세서에서 입력 라인 카드로 복사된다. 각 라인 카드에서 위와 같은 섀도 복사본을 사용할 때의 이점 → 패킷 단위로 중앙 집중식 라우팅 프로세서를 호출하지 않게 됨 → 병목 현상을..

[Network] 라우터 내부 구조와 관련된 포워딩(forwarding) 정리 [내부링크]

라우터 내부 구조 상위 레벨의 관점에서 본 일반적인 라우터 구조 입력 포트(input port) 여기서의 포트(port) → 물리적인 입출력 라우터 인터페이스를 의미 네트워크 애플리케이션 및 소켓과 관련된 소프트웨어 포트와는 명백히 다름 가장 중요한 기능 - 검색 기능 이는 가장 오른쪽 박스에서 발생 포워딩 테이블을 참조하여 도착된 패킷이 스위치 구조를 통해 라우터 출력 포트를 결정 → 제어 패킷은 입력 포트에서 라우팅 프로세서로 전달된다. 맨 왼쪽 박스와 출력 포트의 맨 오른쪽 박스 → 라우터로 들어오는 입력 링크로, 물리 계층 기능을 수행 들어오는 링크의 반대편에 있는 링크 계층과 상호 운용을 하기 위해 필요한 링크 계층 기능을 수행 이 링크 계층 기능은 입력 및 출력 포트에서 미들박스로 표시된다. ..

[Network] 네트워크 서비스 모델 요점 정리 [내부링크]

네트워크 서비스 모델 네트워크 서비스 모델 : 송수신 호스트 간 패킷 전송 특성을 정의 네트워킹에 관련된 다양한 의문은 네트워크 계층이 제공하는 서비스 모델에 따라 결정됨 트랜스포트에서 네트워크 계층이 목적지까지 패킷을 전달하는 걸 믿을 수 있는가? 여러 패킷이 전송될 때 동일한 순서로 수신자의 트랜스포트 계층에 전달될 수 있는가? 네트워크가 네트워크 혼잡에 대한 피드백을 제공할 수 있는가? 송신 호스트와 수신 호스트에서 트랜스포트 계층을 연결하는 채널의 추상적인 관점이란? 네트워크 계층이 제공할 수 있는 서비스 보장된 전달 패킷이 출발지 호스트로부터 목적지 호스트까지 도착하는 것을 보장하는 서비스 지연 제한 이내의 보장된 전달 패킷의 전달과 더불어 호스트 간의 특정 지연 제한 안에 전달함을 보장하는 서..

[Network] 제어 평면 2가지 접근 방법(포워딩 테이블, SDL) [내부링크]

포워딩 테이블(forwarding table) 네트워크 라우터에서 필수 불가결한 요소 포워딩은 네트워크 계층 데이터 평면에 의해 실행되는 매우 중요한 기능 라우터 역할 : 도착하는 패킷 헤더의 필드값을 조사하여 패킷을 전달 → 이 값을 라우터의 포워딩 테이블의 내부 색인으로 사용 포워딩 테이블 엔트리에 저장되어 있는 헤더 값 해당 패킷이 전달되어야 하는 라우터의 외부 링크 인터페이스를 나타냄 헤더의 값은 네트워크 계층 프로토콜에 따라 다름 패킷의 목적지 주소일 수도 있고, 패킷이 속한 연결의 지시 일수도 있음 제어 평면: 전통적인 접근 방법 첫 포워딩 테이블이 어떻게 구성되는가? (제어 평면에서) 라우팅과 (데이터 평면에서) 포워딩 사이의 중요한 상호작용을 보임 라우터의 포워딩 테이블의 내용은 라우팅 알..

[Java/C++] 프로그래머스 Level 3 - 사라지는 발판 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/92345 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2022 카카오 블라인드 코딩테스트에서 나왔던 문제. 문제 자체는 이해하기 쉬운데, 풀기는 너무 어렵다. 다른 사람들은 100점 방지용 문제라고도 하더라. 문제 핵심 및 풀이 해당 문제의 해결법 결론부터 말하자면 해당 문제는 재귀와 백트래킹에 대해 정말 잘 이해하고 있거나, 미니맥스(MiniMax) 알고리즘을 알고 있어야 풀 수 있다. 미니맥스 알고리즘은 게임 이론 및 AI에서 사용하는..

[네트워크] 라우터의 역할 및 포워딩과 라우팅의 개념과 차이 [내부링크]

두 호스트 사이에 네트워킹이 이뤄지는 과정 두 호스트 사이에는 중계 라우터가 있다고 가정 과정 송신자 네트워크 계층은 본인의 트랜스포트 계층으로부터 세그먼트를 얻는다. 각 세그먼트를 데이터그램으로 캡슐화하고, 인접한 라우터에게 데이터그램을 전송 수신 호스트의 네트워크 계층은 트랜스포트 계층 세그먼트를 추출 후, 본인의 트랜스포트 계층가지 전달 네트워크 제어 평면에 의해 출발지 ~ 목적지 호스트까지 전송되도록 함 → 이때 로컬 포워딩, 라우터 별 포워딩 등을 대응시킴 의미 각 라우터 데이터 평면 역할 → 입력 링크에서 출력 링크로 데이터그램을 전달하는 것 네트워크 제어 평면의 근본적인 역할 → 데이터그램이 출발지 ~ 목적지까지 전달되게끔 로컬, 라우터별 포워딩을 대응시킨 것 라우터 프로토콜 스택 트랜스포트..

[네트워크] QUIC(빠른 UDP 인터넷 연결) 개념 및 특징 [내부링크]

QUIC(Quick UDP Internet Connections) 란? QUIC → 빠른 UDP 인터넷 연결 프로토콜 애플리케이션 설계자는 애플리케이션 계층에 항상 자신의 프로토콜을 확장할 수 있다. 신뢰적인 데이터 전송, 혼잡 제어 및 연결 관리를 위한 많은 접근 방식을 사용 QUIC의 특징 QUIC는 UDP를 하위 트랜스포트 계층 프로토콜로 사용하는 애플리케이션 계층 프로토콜 특히 단순하지만 발전된 HTTP/2 버전 위에서 인터페이스 되도록 설계됨 가까운 장래에 HTTP/3은 기본적으로 QUIC을 통합할 것 QUIC의 주요 기능 연결지향적이고 안전함 TCP와 마찬가지로 QUIC은 두 종단 간의 연결지향 프로토콜 이를 위해 QUIC 연결 상태를 설정하기 위해 종단 간에 핸드셰이크가 필요 연결 상태의 두..

[네트워크] 혼잡 제어 관점으로 본 TCP와 UDP의 공평성 [내부링크]

공평성 혼잡 제어 메커니즘이 공평하다는 것의 정의 가정 각각 다른 종단 간의 경로를 갖고, 전송률이 R bps인 병목 링크가 존재 K개의 TCP 연결이 해당 병목 링크를 지나간다. 병목 링크(bottleneck link) 각 연결에 대해 연결 경로상에 있는 모든 링크는 혼잡하지 않음 병목 링크의 전송 용량과 비교해서 충분한 전송 용량을 갖고 있음을 의미 각 TCP 연결은 큰 파일을 전송하고 있고, 병목 링크를 통과하는 UDP 트래픽은 없음. 위 가정에서 각 연결의 평균 전송률이 R/K에 가까울수록 공평한 것 → 각 연결은 링크 대역폭을 동등하게 공유 TCP가 연결 사이에서 대역폭을 똑같이 공유하는 이유 전송률이 R인 링크 하나를 공유하는 2개의 TCP 연결의 경우 가정 두 연결은 같은 MSS와 RTT를 ..

[네트워크] 명시적 혼잡 알림(ECN)과 지연 기반 혼잡 제어 개념 및 특징 [내부링크]

네트워크 지원 명시적 혼잡 알림과 지연 기반 혼잡 제어 TCP 송신자는 네트워크에서 명시적인 혼잡 표시를 수신하지 않는다. → 대신, 관찰된 패킷 손실을 통해 혼잡을 추론한다. 최근에는 네트워크가 TCP 송/수신자에게 명시적 혼잡 신호를 보낼 수 있도록 IP 및 TCP에 대한 확장이 제한, 구현 및 배포됨 또한 측정된 패킷 지연을 사용하여 혼잡을 추론하는 TCP 혼잡 제어 프로토콜의 일부 변형이 제안 명시적 혼잡 알림(Explicit Congestion Notification, ECN) 인터넷 내에서 수행되는 네트워크 지원 혼잡 제어의 한 형태 TCP와 IP가 모두 관련되어 있음 명시적 혼잡 알림(ECN)을 사용 IP 데이터그램 헤더의 서비스 유형 필드에 있는 2비트에서 사용한다. 혼잡 알림 비트의 사용..

[네트워크] TCP 혼잡 제어 알고리즘의 3가지 요소와 혼잡 제어 모델 정리 [내부링크]

전통적인 TCP의 혼잡 제어 종단 간의 혼잡 제어를 사용 TCP의 접근 방식 네트워크 혼잡에 따라 연결에 트래픽을 보내는 전송률을 각 송신자가 제한하도록 함 TCP 송신자가 자신과 목적지 간의 경로에서 혼잡이 없음을 감지 → 송신자는 송신율을 높임 송신자가 경로 사이에 혼잡을 감지 → 송신자는 송신율을 낮춤 TCP 송신자가 연결로 트래픽을 보내는 전송률을 제한하는 방법 송신 측에서 동작하는 TCP 혼잡 제어 메커니즘은 추가적인 변수인 혼잡 윈도를 추적 혼잡 윈도(congestion window, cwnd) TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 속도에 제약을 가함 LastByteSent - LastByteAcked ≤ min(cwnd, rwnd) → 송신하는 쪽에서 확인응답이 안 된 데이터의..

[네트워크] 혼잡의 원인과 비용, 혼잡 제어의 원리 정리 [내부링크]

혼잡 제어의 원인과 비용 네트워크 혼잡 원인을 처리하기 위한 방법 → 네트워크 혼잡을 일으키는 송신자들을 억제하는 메커니즘 필요 혼잡 제어가 발생하는 시나리오 초점 → 호스트들이 자신의 전송률을 증가시키고 네트워크 혼잡이 발생함에 따라 발생하는 일 시나리오 1 : 2개의 송신자와 무한 버퍼를 갖는 하나의 라우터 각각 출발지와 목적지 사이에 단일 홉을 공유하는 연결을 갖는다. 가정 호스트 A,B의 애플리케이션이 λ(in)바이트/초의 평균 전송률로 연결상으로 데이터를 보냄 → 이러한 데이터는 각 데이터 단위가 소켓으로 한번만 전송된다.(원본 데이터) 소켓을 통해 트랜스포트 계층 프로토콜로 데이터를 넘겨주는 것 하위의 트랜스포트 계층 프로토콜은 단순히 데이터를 캡슐화하고 전송하는 역할 → 오류 복구, 흐름 제..

[Java/C++] 프로그래머스 Level 3 - 110 옮기기 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/77886?language=cpp [월간 코드 챌린지 시즌2]에 나온 문제라고 한다. 문제는 짧아서 좋긴 한데, 풀기 어려웠다. 문제 핵심 및 풀이 우선순위 파악 이 문제에서 구해야 하는 것은 입력 숫자에 대해 사전순으로 가장 빠른 것을 찾는 것이다. 앞자리에 '0'이 많을수록 사전순으로 빠르다. 110을 삽입할 때, 적어도 기존의 위치보다는 더 앞자리에 있어야 한다. 110을 삽입한다고 생각해 보자. 만약 '0' 앞에 삽입한다면 이 자리에 있던 '0'은 원래 자리보다 3칸이나 더 뒤로 미뤄지는 것이다. 그래서 '0'이 있다면 뒤에 삽입하는 것이 사전순으로 이득일 것이다. 이런 식의 사고를 ..

[네트워크/Network] TCP의 세방향 핸드셰이크(3-Way HandShake)와 연결 종료의 자세한 과정 [내부링크]

TCP 연결 관리 일반적인 네트워크 공격의 대부분은 TCP 연결 관리의 취약점을 악용 SYN 플러드(flood) 공격 등 TCP 연결 설정의 자세한 과정 가정 호스트(클라이언트)에서 운영되는 프로세스가 다른 호스트(서버)의 프로세스와 연결 설정을 원함 → 클라이언트 TCP에게 연결 설정을 원하다는 사실을 알린다. → 클라이언트 TCP는 TCP를 이용해 서버와 TCP 연결 설정을 시작함 연결 설정을 위해 두 호스트 사이에서 3개의 패킷이 송신됨 → 세 방향 핸드 셰이크 세 방향 핸드셰이크 1단계 클라이언트 측 TCP는 서버 TCP에게 SYN 세그먼트를 송신 SYN 세그먼트 애플리케이션 계층 데이터를 포함하지 않는다. SYN 비트라고 불리는 하나의 비트 플래그를 1로 설정 → SYN 세그먼트라고 불리는 이유..

[네트워크/Network] TCP 흐름 제어 개념과 원리 [내부링크]

흐름 제어 서비스(flow-control service) 애플리케이션에게 흐름 제어 서비스를 제공하는 이유 TCP 연결의 각 종단에서 호스트들은 연결에 대한 개별 수신 버퍼를 설정 → 송신자는 수신자의 버퍼를 오버플로시키는 것을 방지하기 위해 제공 수신자의 버퍼가 오버플로가 발생하는 과정 TCP 연결이 순서대로 올바르게 바이트를 수신할 때 TCP는 데이터를 수신 버퍼에 저장 해당 애플리케이션 프로세스는 버퍼에서 데이터를 읽지만, 수신한 시점에 읽을 필요 없음 → 오랜 시간 동안 데이터를 읽지 않을 수도 있음 송신자가 점점 더 많은 데이터를 전송함으로써 연결의 수신 버퍼에 오버플로 발생 애플리케이션이 데이터 읽는 속도가 느릴수록 발생 가능성 높음 송신자의 데이터 전송 속도가 빠를수록 발생 가능성 높음 흐름..

[네트워크/Network] TCP 데이터 전송 주요 이벤트와 동작 과정 정리 [내부링크]

신뢰적인 데이터 전송 비신뢰적인 인터넷의 네트워크 계층(IP 서비스) 인터넷 프로토콜은 데이터그램 전달을 보장 X 데이터그램이 순서대로 전달되는 것도 보장 X 데이터그램에 포함된 데이터의 무결성(intergrity)을 보장 X 비트가 손상될 수도 있다. IP 서비스에서 데이터그램은 라우터의 버퍼를 오버플로 상태로 만들 수 있음 트랜스포트 계층의 세그먼트가 IP 데이터그램에 의해 네트워크 상에서 운반됨 → 트랜스포트 계층의 세그먼트도 이러한 문제를 겪을 수 있음 TCP의 신뢰적인 데이터 전송 서비스 TCP는 IP의 비신뢰적인 최선형 서비스에서 신뢰적인 데이터 전송 서비스를 제공 TCP 타이머 관리 절차에서는 단일 재전송 타이머 사용을 권장한다. 전송됐지만 아직 확인응답받지 못한 세그먼트와 개별적인 타이머가..

[운영체제] CPU 스케줄링 기본 개념과 기준 정리 [내부링크]

CPU 스케줄링 기본 개념 기본 가정 일반적인 스케줄링 개념을 논의하는 경우 → 프로세스 스케줄링 스레드에 국한된 개념을 가리키는 경우 → 스레드 스케줄링 “CPU에서 실행”이라는 용어를 사용하는 경우 → 프로세스가 CPU 코어에서 실행되고 있음을 의미 다중 프로그래밍 다중 프로그래밍의 목적 CPU 이용률을 최대화하기 위해 항상 실행 중인 프로세스를 가지게 하는 데에 있음 대기 시간으로 인한 낭비를 줄여 시간을 생산적으로 활용하려고 시도한다. 대기 시간이 발생하는 이유 → 프로세스는 I/O 요청이 완료되기를 기다려야 함 다중 프로그래밍 개념 → 해당 개념은 모든 처리 코어로 확장됨 CPU를 항상 바쁘게 유지한다. → 다수의 프로세스를 메모리 내에 유지한다. 어떤 프로세스가 대기해야 하면, 운영체제는 CP..

[네트워크/Network] 왕복 시간(RTT) 예측과 타임아웃 주기 설정 [내부링크]

왕복 시간(RTT) 예측 TCP는 손실 세그먼트를 발견하기 위해 타임아웃/재전송 메커니즘을 사용 SampleRTT SamepleRTT : RTT 샘플 세그먼트 RTT(Rount-trip time) : 세그먼트가 송신된 시간부터 긍정 확인응답될 때까지의 시간의 길이 TCP는 한 번에 하나의 SampleRTT만 측정 → 모든 전송된 세그먼트에 대해 SampleRTT를 측정하지 않는다. → SampleRTT가 전송되었지만 현재 확인응답이 없는 세그먼트 중 하나에 대해서만 측정됨 이 측정시간은 왕복시간마다 SampleRTT의 새로운 값을 얻게 한다. TCP는 재전송한 세그먼트에 대한 SampleRTT는 계산하지 않고, 한 번 전송된 세그먼트에 대해서만 측정한다. SampleRTT의 값 해당 값은 라우터에서의 혼..

[네트워크/Network] TCP 세그먼트 필드 - 순서/확인 응답 번호의 개념 및 사용 [내부링크]

순서 번호와 확인 응답 번호 TCP 세그먼트 헤더에서 가장 중요한 필드 TCP의 신뢰적인 데이터 전송 서비스의 중대한 부분 순서 번호의 사용 일련의 전송된 세그먼트에 대해가 아닌, 전송된 바이트 스트림에 대한 관점을 반영 TCP는 데이터를 구조화하지 않고, 순서대로 정렬되어 있는 바이트 스트림으로 봄 세그먼트에 대한 순서 번호 → 세그먼트에 있는 첫 번째 바이트의 바이트 스트림 번호 실제 TCP 연결 양쪽 모두 시작 순서 번호를 임의로 선택 → 종료 이후에도 네트워크에 남아있던 세그먼트와의 오인될 확률을 최소화하기 위해 → 같은 호스트 간의 나중 연결을 위해서 순서 번호 사용 예시 가정 호스트 A 프로세스는 TCP 연결상에서 호스트 B의 프로세스로 데이터 스트림의 전송을 원함 호스트 A의 TCP는 데이터..

[네트워크/Network] TCP 연결의 개념, 원리 및 세그먼트 구조 정리 [내부링크]

TCP 연결 TCP - 연결지향형(connection-oriented) 두 프로세스 간의 데이터 전송 및 수신을 위해 핸드셰이크가 필요 데이터 전송을 보장하는 파라미터들을 설정해야 함 → 각자 어떤 사전 세그먼트들을 보낸다. TCP 연결의 양단은 TCP 연결과 연관된 많은 TCP 상태 변수를 초기화한다. TCP 관점에서의 연결 두 통신 종단 시스템의 TCP에 존재하는 상태를 공유하는 논리적인 것 TCP 프로토콜은 오직 종단 시스템에서만 동작, 중간 네트워크 요소에서는 동작 X → 중간 네트워크 요소들은 TCP 연결 상태를 유지하지 않는다. 중간 라우터들은 TCP 연결을 전혀 감지하지 못한다. 중간 라우터는 연결은 보지 못하고, 데이터그램만 봄 TCP 연결은 한쪽 호스트에서의 소켓 연결과 다른 쪽 호스트에..

[Java/C++] 프로그래머스 Level 3 - 기둥과 보 설치 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/60061 [2020 카카오 블라인드]에서 나왔던 문제. 너무 생각을 복잡하게 하고, 이상하게 해서 오래 걸렸다. 문해력이 부족한 탓일까? 문제 핵심 및 풀이 제한 사항 분석 제한사항을 보면 n은 최대 100이기 때문에, 100x100이 한계이다. 또한 build_frame이라는 구조물의 설치/삭제 커맨드는 최대 1000개까지 들어온다. 100x100x1000 = 10^7 으로 완전탐색을 해도 상관이 없다. 구조물을 어떻게 표현할 것인가? 이것도 나름 생각이 필요했다. 문제에서 기둥은 위로 설치하고, 보는 오른쪽으로 설치한다고 했다. 그래서 이를 설치가 시작된 곳의 좌표로, 구조물을 표현했다..

[네트워크/Network] 파이프라이닝 오류 회복 방법 - GBN,SR 정리 [내부링크]

GBN(Go-Back-N, N부터 반복) 프로토콜 프로토콜 이름은 손실이 있거나 아주 긴 지연된 패킷이 있을 때의 송신자 동작으로부터 유래됨 해당 프로토콜에서 송신자는 확인응답을 기다리지 않고 여러 패킷을 전송할 수 있다. 파이프라인에서 확인응답이 안 된 패킷의 최대 허용 수 N보다 크면 안 된다. GBN 프로토콜의 사용으로 송신자는 패킷으로 파이프라인을 채우는 것이 가능해짐 송신자 관점의 순서 번호 범위 base : 확인응답이 안 된 가장 오래된 패킷의 순서 번호 nextseqnum : 사용되지 않은 가장 작은 순서 번호 전송될 다음 패킷의 순서 번호 4가지 순서 번호 범위 간격 [0, base-1] 순서 번호는 이미 전송되고 확인응답된 패킷에 대응된다. 간격 [base, nextseqnum-1] 송신..

[네트워크/Network] rdt3.0(전송 후 대기) 분석과 파이프라이닝의 필요성 [내부링크]

rdt3.0 비트 오류와 손실 있는 채널상에서의 신뢰적인 데이터 전송 2가지 부가 내용을 프로토콜로 생각해야 함 어떻게 패킷 손실을 검출할 것인가? 새로운 프로토콜 메커니즘을 추가해야 함 패킷 손실이 발생했을 때, 어떤 행동을 할 것인가? 체크섬, 순서 번호, ACK 패킷, 재전송의 사용 송신자에게 손실된 패킷의 검출과 회복 책임을 부여 송신자의 손실된 패킷의 검출 가정 송신자가 데이터 패킷을 전송하고, 패킷 또는 수신자 패킷에 대한 ACK를 손실 → 송신자에게는 수신자로부터 어떠한 응답도 없음 송신자가 패킷을 잃어버렸다고 확신할 정도로 충분한 시간을 기다릴 수 있다면, 패킷을 재전송 가능 패킷 손실 확신을 위해선 얼마나 기다려야 할까? 적어도 송신자와 수신자 사이의 (왕복 시간 지연 + 수신 측에서 패..

[Java/C++] 프로그래머스 Level 3 - 코딩테스트 연습 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/118668?l [2022 KAKAO TECH INTERNSHIP]에 나왔던 문제 현재 프로그래머스에서 정답률은 20%로 Level 3 중에서도 낮은데, 실제 시험에서는 훨씬 더 낮지 않았을까? 다른 사람이 푼걸 보니, 꽤나 풀이법이 다양하게 나오는 문제였다. 그리고 최적화를 아주 깐깐하게 보는 문제였다. 문제 핵심 및 풀이 행동의 선택지 생각하기 어떻게 보면 문제를 그냥 정리하는 것일 수도 있는데, 난 여기서 큰 힌트를 얻었다. 점수는 알고력과 코딩력이라는 2가지의 유형이 존재하므로, 이를 각각 A, B라고 두겠다. 초기 점수가 (A, B)라고 생각해 보자. 최단 시간을 얻기 위해 할 수 ..

[네트워크/Network] 신뢰적인 데이터 전송 프로토콜 - rdt 1.0 / rdt 2.0(1,2) 분석 정리 [내부링크]

rdt 1.0 rdt 1.0 : 완벽하게 신뢰적인 채널상에서의 신뢰적인 데이터 전송 프로토콜 하위 채널이 완전히 신뢰적인 가장 간단한 경우 유한 상태 머신(FSM) 정리 rdt1.0 송신자와 수신자에 대한 유한상태 머신(finite-state machine) (a) : FSM은 송신자의 동작을 정의 (b) : FSM은 수신자의 동작을 정의 송신자와 수신자는 분리된 FSM을 가진다. 해당 그림에서 송신자와 수신자 FSM은 각각 하나의 상태만을 가진다. 하나의 상태를 가지므로, 전이는 그 상태로부터 자신으로 되돌아옴 유한 상태 머신 표기 점선 화살표 : FSM의 초기 상태 액션(action) : 이벤트가 발생했을 때 취해지는 것 가로선 아래에 나타냄 이벤트(event) : 전이를 일으킴 가로선 위에 나타냄 ..

[네트워크/Network] 신뢰적인 데이터 전송 서비스 추상화와 동작 원리 [내부링크]

신뢰적인 데이터 전송의 원리 신뢰적인 채널의 서비스 추상화 상위 계층 객체에게 제공에게 제공된다. 데이터가 전송될 수 있는 신뢰적인 채널의 서비스 추상화이다. TCP 인터넷 애플리케이션에게 제공하는 서비스 모델 신뢰적인 채널에서 전송된 데이터는 손상이나 손실되지 않는다. 모든 데이터는 전송된 순서 그대로 전달된다. 신뢰적 데이터 전송 프로토콜의 의무 - 서비스 추상화를 구현 신뢰적인 전송 프로토콜 ‘아래에 있는’ 계층이 신뢰적이지 않을 수 있어서 어려워진다. 예시 TCP → IP의 바로 상위에 구현된 신뢰적인 데이터 프로토콜 비신뢰적인 종단 간의 네트워크 계층(IP) 신뢰적으로 통신하는 두 종단점 바로 아래에 있는 계층의 구성 단일 물리적 링크(링크 레벨 프로토콜) 전 세계 인터넷 네트워크(트랜스포트 레..

[Java/C++] 프로그래머스 Level 2 - 스킬트리 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/49993? [Summer/Winter Coding 2018~]로 태그가 나와있던데 아무튼 그렇다. 직관적이고 단순하게 생각하면 된다. 복잡하게 생각하면 더 어려워지는 문제인 것 같다. 문제 핵심 및 풀이 선행 스킬 관계 만들기 특정 스킬을 익히기 전에 익혀야 할 스킬을 선행 스킬이라고 하겠다. 이건 단순하게 꼬리물기 구조로 만들어주면 된다. "BCD"가 규칙일 때, B → C → D라는 뜻인데, 연속적으로 이루어져 있다.. 이걸 부모 자식 관계로 한번 바꿔서 생각해 보자. C를 배우기 위해선 B가 필요하다. 즉, parent [C] = B가 된다. D라는 스킬을 배우기 위해선 B, C 2개..

[네트워크/Network] 비연결형 트랜스포트(UDP)의 특징과 구조 [내부링크]

UDP - 최소 기능의 트랜스포트 계층 프로토콜 UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 동작한다. UDP가 제공하는 기능 다중화/역다중화 간단한 오류 검사 기능 → IP에 아무것도 추가하지 않는다. UDP를 사용한다는 것은 거의 IP와 직접 통신하는 것과 같다. 데이터 전달 과정 애플리케이션 프로세스로부터 메시지를 가져와서 세그먼트를 생성하여 네트워크 계층으로 넘김 세그먼트의 구성 다중화/역다중화 서비스에 대한 출발지 포트 번호 필드와 목적지 포트 번호 필드 다른 2개의 필드 네트워크 계층은 세그먼트를 IP 데이터그램으로 캡슐화하고, 수신 호스트에게 전달하기 위해 최선을 다한다. 세그먼트가 수신 호스트에 도착 UDP는 데이터 전달을 위해 목적지 포트 번호를 사용해 애플리케이션 프로..

[네트워크/network] 트랜스포트 계층의 데이터 다중화와 역다중화 [내부링크]

트랜스포트 계층의 데이터 수신 및 전달 트랜스포트 계층의 의무 목적지 호스트의 트랜스포트 계층은 바로 아래의 네트워크 계층으로부터 세그먼트를 수신 → 목적지 호스트의 트랜스포트 계층은 호스트에서 동작하는 프로세스에게 수신한 세그먼트를 전달할 의무를 지님 예시 4개의 네트워크 애플리케이션을 갖는다고 가정 트랜스포트 계층이 하위 네트워크 계층으로부터 데이터를 수신 → 4개의 프로세스 중 하나에게 데이터를 전달해야 함 트랜스포트 계층에서의 소켓 프로세스는 네트워크 애플리케이션의 한 부분으로서 소켓을 가지고 있다. 이를 통해 네트워크와 프로세스 간의 데이터를 교환하는 출입구 역할을 함 수신 측 호스트의 트랜스포트 계층은 데이터를 직접 프로세스에 전달하지 않는다. → 대신 중간 매개자인 소켓에게 전달 각각의 소켓..

[네트워크/Network] 인터넷 프로토콜(IP) 개념과 UDP/TCP 서비스 모델 [내부링크]

인터넷 트랜스포트 계층의 개요 인터넷 문서(RFC)에서 트랜스포트 계층 패킷 용어 표기 TCP → 세그먼트 UDP → 세그먼트 or 데이터그램 인터넷 프로토콜(IP) 인터넷 프로토콜(Internet Protocol) 인터넷의 네트워크 계층 프로토콜의 이름 IP 서비스 모델은 호스트들 간에 논리적 통신을 제공하는 최선형 전달 서비스 최선형 전달 서비스(best-effort delivery service) IP가 통신하는 호스트들 간에 세그먼트 전달에 최대한 노력한다. 하지만 IP는 어떤 보장도 하지 않는다. 세그먼트의 전달을 보장하지 않는다. 세그먼트가 순서대로 전달되는 것을 보장하지 않는다. 세그먼트 내부 데이터의 무결성(integrity)을 보장하지 않는다. → 이러한 이유로 IP를 비신뢰적인 서비스라..

[Java/C++] 프로그래머스 Level 3 - 상담원 인원 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/214288 2023 현대 모비스 알고리즘 경진대회 예선에서 출제된 문제. 시간제한을 두고 풀 땐 실패했지만 집에서 천천히 풀어보니 아이디어가 쉽게 떠올랐던 문제 문제 핵심 및 풀이 시간 복잡도 파악 문제 해결을 위해 시간 복잡도를 계산해야 한다. 제한 사항을 살펴보자. 상담 유형은 최대 5개, 멘토의 수는 최대 20명, 상담 요청은 최대 300개까지이다. 문제에서 핵심적으로 해야 하는 것은 멘토 n명을 상담 유형 k에 적절히 분배하는 것이다. 만약 가능한 모든 경우의 수를 구해서 찾는다면 대략 얼마나 걸릴까? k = 5, n = 20이라고 가정하자. 각 유형별로 적어도 1명은 존재해야 하므..

[네트워크/Network] 트랜스포트 계층 프로토콜의 정의와 논리적 통신 [내부링크]

트랜스포트 계층 서비스 및 개요 트랜스포트 계층 프로토콜의 논리적 통신 다른 호스트에서 동작하는 애플리케이션 프로세스 간 논리적 통신을 제공 논리적 통신(logical communication) 애플리케이션 관점, 프로세스를 동작시키는 호스트들이 직접 연결된 것처럼 보인다는 의미 호스트는 수많은 라우터와 다양한 형태의 링크를 통해 연결되어 있음 → 이를 통해 서로 다른 지역에 존재할 수 있음 애플리케이션 프로세스는 메시지 송신을 하는데 논리적 통신을 사용한다. ← 메시지 운반에 사용되는 인프라스트럭처의 세부사항에 상관없이 메시지를 송신하기 위해서 논리적 통신의 개념(과정) 트랜스포트 계층 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현됨 송신 측의 트랜스포트 계층은 송신 애플리케이션 프로세스로부터..

[네트워크/Network] TCP 소켓 프로그래밍 개념 및 구현(Python) [내부링크]

클라이언트-서버 애플리케이션 개발 애플리케이션에 TCP, UDP 중 어떤 것을 사용할지 결정해야 함 TCP : 연결지향적 서비스 신뢰적 바이트 스트림 채널 제공 해당 채널을 통해 데이터가 두 종단 시스템 사이를 흐름 UDP : 비연결형 서비스 한 종단 시스템에서 다른 곳으로 데이터를 독립적인 패킷으로 만들어 전송 전송에 대한 보장을 하지 않는다. RFC 표준 프로토콜 vs 개인 독점 프로토콜 RFC 표준 프로토콜 오늘날 대부분의 네트워크 애플리케이션 독립 개발자가 개발한 클라이언트와 서버 프로그램 간의 통신을 포함 RFC에 정의된 프로토콜을 구현할 때, 해당 프로토콜과 잘 알려진 포트 번호를 사용 개인 독점 프로토콜 공개된 프로토콜을 구현하지 않음 → 다른 독립 개발자는 이 애플리케이션과 상호작용하는 코..

[네트워크/Network] UDP 소켓 프로그래밍 개념 및 구현(Python) [내부링크]

UDP를 이용한 소켓 프로그래밍 UDP 소켓 프로그래밍 과정 송신 프로세스가 데이터 패킷을 소켓 밖으로 내기 전에 먼저 패킷에 목적지 주소를 붙여 넣음 패킷이 송신자의 소켓을 통과 해당 소켓을 인터넷을 통해 수신 프로세스에 있는 소켓으로 라우트함 패킷이 수신 소켓에 도착 수신 프로세스는 소켓을 통해 해당 패킷을 추출하고 다음에 패킷의 콘텐츠를 조사 및 동작 UDP 패킷 구성 목적지 주소 목적지 주소 = 목적지 호스트 IP 주소 + 소켓 포트 번호 목적지 호스트 IP 주소 → 이를 통해 인터넷의 라우터는 목적지 호스트로 인터넷을 통해 패킷을 라우트 가능 소켓 포트 번호 포트 번호(port number) : 소켓이 생성될 때 소켓에 할당되는 식별자 호스트는 여러 개의 소켓을 갖는 많은 네트워크 애플리케이션 ..

[Java] 함수형 인터페이스를 이해하면 코딩이 편해진다. [내부링크]

함수형 인터페이스를 알면 편한 이유 우리가 보통 코딩을 할 때 Visual Studio Code, Intellij 등 IDE 환경에서 진행한다. IDE를 사용하면 엄청나게 편리하다. 내가 여기서 말하고자 하는 것은, IDE가 클래스의 함수 이름과 기능을 제공해 주는 것에 대한 것이다. 컬렉션이 어떤 함수를 가지고 있는지를 알 수 있고, 어떤 기능을 하는지 알 수 있다. 위는 인텔리제이에서 arrayList 컬렉션에서 사용할 수 있는 함수를 IDE에서 창으로 알려주는 모습이다. 빨간 줄 부분이 전부 함수형 인터페이스 부분이다. 사실 함수형 인터페이스는 생소하지만 항상 우리 옆에 있었다. 함수형 인터페이스를 모른다면, IDE에서 해당 함수의 사용법을 알려줬는데도 사용하지 못하는 것이다. 예를 들어서 stre..

[Java/C++] 프로그래머스 Level 2 : [3차] 방금그곡 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/17683? 2018 카카오 블라인드 3차 코딩 테스트에서 나왔던 문제단순 구현 문제라고 생각되는데, 생각보다 구현해야 하는 함수 부분이 많아서 잘 정리하는 게 중요했다. 또한 예외 케이스가 많은 문제여서 테스트 케이스를 잘 짜는 것이 중요했다. 문제 핵심 및 풀이 멜로디와 일치하는 곡 찾기의 문제 멜로디(m)가 곡(musicInfo) 안에 있는지 확인하는 과정은, 일반적으로는 문자열 비교로 하면 된다. 하지만 입출력 예시 3번에서 볼 수 있듯이 #이 문제가 된다. 일반적인 문자열 비교로 찾을 때는, m = "ABC" , musicInfo = "ABC#" 일 때, 조건 일치로 판단한다. 그래..

[Java/C++] 프로그래머스 Level 2 - 택배 배달과 수거하기 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/150369? 2023년 카카오 블라인드에서 나온 따끈따끈한 최신 문제 이 문제를 실제 테스트로 봤으면 어땠을까? 문제 로직은 크게 어렵다고 생각 들진 않았지만 이상하게 푸는데 오래 걸렸다. 문제 핵심 및 풀이 제한사항 부분을 보면 집(n)의 개수가 최대 100,000개이고, cap은 50까지밖에 되지 않는다. deliveries와 pickups의 개수 또한 n과 같다. 해당 문제에서는 cap이 50밖에 되지 않는 것은 오히려 반복 횟수를 늘린다. 왜냐하면 50번밖에 담지 못하니까 여러 번 왔다 갔다 해야 하니까.. 그래서 완전탐색으로 해당 문제를 풀기에는 비효율적으로 보이고, 실제로 완전 ..

[Java/C++] 프로그래머스 Level 3 - 다단계 칫솔 판매 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/77486 2021 Dev-Maching에서 나온 문제 카카오 기출문제만 풀다와서 그런진 모르겠는데, Level 3 치곤 쉽게 풀었다. 만약 카카오 코딩 테스트에서 나왔다면, Level 2 쯤 아니었을까? 문제 핵심 및 풀이 그림에서 보면 알 수 있듯이, 트리 구조가 형성되는 것을 알 수 있다. 그리고 해당 문제에서는 자신을 추천한 사람을 아는 것이 중요한데, parent [i] = k : i를 추천한 사람이 k이다. 이런 식으로 정의하도록 한다. 사람 이름 문자열을 매핑 여기서 생각해야 할 것은 트리의 각 노드들이 사람이름(문자열)이라는 점이다. 그래서 parent의 인덱스로 문자열을 사용..

[네트워크/Network] 넷플릭스와 유튜브의 비디오 스트리밍 방식 [내부링크]

스트리밍 저장 비디오 - 넷플릭스 넷플릭스 비디오 배포에는 2가지 주요 구성요소 아마존 클라우드 자체 CDN 인프라가 있음 아마존 클라우드 웹사이트는 아마존 클라우드에서 모든 것이 실행된다. 넷플릭스에서의 웹사이트 사용자 등록 및 로그인, 결제, 영화 장르 검색, 영화 추천 서비스 등 다양한 기능 처리 아마존 클라우드의 주요한 기능 콘텐츠 수집(contetent ingestion) 넷플릭스는 고객들에게 비디오 분배 전, 먼저 영화를 수집하고 처리해야 한다. 영화의 스튜디오 마스터 버전을 받아서 클라우드 시스템의 호스트에 업로드함 콘텐츠 처리(content processing) 아마존 클라우드 시스템의 기기에서는 각 영화의 여러 가지 형식의 비디오를 생성 ← 고객들의 다양한 플레이어 기기 사양에 적합하기 ..

[네트워크/Network] CDN의 구축 방식과 클러스터 선택 정책 및 DNS 활용 [내부링크]

거대 데이터 센터 구축 및 직접 전송 인터넷 비디오 회사에서 스트리밍 서비스를 제공하는 가장 단순한 방법 인터넷 비디오 회사들은 엄청난 스트리밍 트래픽을 전 세계에 걸친 지점에 끊김 없이 안정적으로 제공하는 일을 한다. 이러한 일들은 매우 어려운 문제임 과정 단일한 거대 데이터 센터를 구축하여 모든 자료를 센터에 저장 전 세계의 사용자에게 비디오 스트림을 데이터 센터로부터 직접 전송 문제점 클라이언트가 데이터 센터로부터 멀리 있는 경우 서버로부터 클라이언트로의 패킷 경로는 많은 통신 링크와 ISP를 거쳐감 거쳐가는 많은 통신 링크 중 하나라도 비디오 소비율보다 낮은 전송용량인 경우 → 종단 간에 처리율이 낮아지고, 결국 사용자는 화면 정지 현상을 겪음 종단 간의 길이가 길어질수록 이런 현상은 증가 인기 ..

[네트워크/Network] 인터넷 비디오 매체와 HTTP 스트리밍 및 DASH [내부링크]

인터넷 비디오 스트리밍 비디오 애플리케이션 → 미리 녹화된 비디오를 대상으로 한다. 녹화된 비디오는 서버에 저장되어 사용자가 서버에게 온디맨드 요청을 통해 시청 예 : 넷플릭스, 유튜브, 아마존, 틱톡 등 많은 인터넷 회사가 비디오 스트리밍 지원 비디오 매체의 특징 비디오는 일반적으로 초당 24개 혹은 30개의 이미지로 일정한 속도로 표시 비디오는 이미지의 연속이다. 압축되지 않은 디지털 인코딩된 이미지는 픽셀 단위로 구성 각 픽셀은 휘도와 색상을 나타내는 여러 비트들로 인코딩 됨 비디오의 중요 특징 - 압축 가능 비디오 품질과 비트 전송률은 서로 반비례하다. 현대 상용 압축 알고리즘은 원하는 모든 비트 전송률로 비디오 압축 가능 비트 전송률이 높을수록 이미지 품질이 좋아지고 사용자 시청 환경이 향상 압..

[운영체제] 교착 상태 탐지(Deadlock Detection)과 회복 방법 정리 [내부링크]

교착 상태 탐지(Deadlock Detection) 시스템이 교착 상태 예방 혹은 방지 알고리즘을 사용하지 않는 경우 다음 2가지 알고리즘들을 반드시 지원해야 한다. 교착 상태가 발생했는지 결정하기 위해 시스템의 상태를 검사하는 알고리즘 교착 상태로부터 회복하는 알고리즘 탐지와 회복 방법은 필요한 정보를 유지하고 탐지 알고리즘을 실행 시간 비용이 든다. 또한, 교착 상태로부터 회복할 때 내재하는 가능한 손실을 포함하는 오버헤드가 필요 각 지원 유형이 한 개씩 있는 시스템 대기 그래프(wait-for graph) 해당 경우, 대기 그래프를 사용해서 교착 상태 알고리즘을 정의 대기 그래프(wait-for graph) : 자원 할당 그래프의 변형 대기 그래프를 얻는 방법 자원 할당 그래프로부터 자원 유형의 노..

[네트워크/Network] P2P 파일 분배의 개념과 비트 토렌트 [내부링크]

P2P 파일 분배 P2P 구조는 항상 켜져 있는 인프라스트럭처 서버에 최소한으로 의존한다. 인프라스트럭처 서버에 전혀 의존 안 할 수도 있음 cf ) 클라이언트-서버 구조 → 인프라스트럭처 서버에 많이 의존함 P2P는 간헐적으로 연결되는 피어(호스트 쌍)들이 서로 직접 통신 피어는 사용자가 제어하는 데스크톱과 랩톱, 스마트폰이 보유한다. 서비스 제공자가 소유하는 것이 아님 자연적인 P2P 애플리케이션 커다란 파일을 한 서버에서 다수의 호스트(피어)로 분배한다. 파일이 될 수 있는 것 리눅스 운영체제의 새로운 버전 기존 운영체제 혹은 애플리케이션을 위한 소프트웨어 패치(patch) MP3 음악파일 혹은 MPEG 비디오 파일 클라이언트-서버 파일 분배에서 서버는 파일 복사본을 각 피어들에게 보내야 함 → 이..

[Java/C++] 프로그래머스 Level 2 - 후보키 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/42890? 카카오 코딩 테스트 문제 위주로 풀고 있는데, 어째 Level 2에 나오는 문제는 왜 전부 유형이 비슷한 거 같지? 문제 핵심 및 풀이 제한 사항 부분에서 문제의 유형을 알 수 있다. 고를 수 있는 선택지인 column이 최대 8개, 판별해야 할 row는 최대 20밖에 되지 않는다. 탐색 범위가 엄청 작은 것을 알 수 있어서, 이 문제는 완전 탐색으로 충분히 풀 수 있다는 것을 알 수 있다. 키 쌍이 될 수 있는 경우의 수 어떤 속성(column)의 조합이 후보키가 될 수 있는지는 속성 조합을 만들어보고, 직접 모든 row와 비교해 보는 수박에 없다. 그렇기 때문에 결국엔 조합이..

[운영체제] 교착 상태 회피와 자원 할당 알고리즘, 은행원 알고리즘 [내부링크]

교착 상태 회피(Deadlock Avoidance) 교착 상태 예방의 단점 장치의 이용률이 저하됨 시스템 총 처리율(throughput)이 감소 교착 상태 회피 원리 자원이 어떻게 요청될지에 대한 추가 정보를 제공하도록 요구하는 것 각 스레드의 요청과 방출에 대한 완전한 순서를 미리 안다면, 각 요청에 대해 스레드가 대기해야 하는지의 여부를 결정할 수 있다. → 각 요청에서 발생할 수 있는 교착 상태를 피할 수 있다. 스레드 대기 여부를 결정하기 위해, 여러 가지 정보를 고려해야 한다. 현재 가용 자원 현재 각 스레드에 할당된 자원 각 스레드가 앞으로 요청하거나 방출할 자원 교착 상태 회피 알고리즘 각 스레드가 자신이 필요로 하는 각 유형의 자원마다 최대 수를 선언하도록 요구하는 것 → 가장 단순하고 제..

[Java/C++] 프로그래머스 Level 2 - 메뉴 리뉴얼 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/72411 2021 카카오 블라인드 코딩 테스트에서 나온 문제. 자료구조 Map을 잘 알아야 풀 수 있는 문제 같다. Map을 사용하지 않고 다른 건 잘 모르겠다. 문제 핵심 및 풀이 메뉴(orders)의 개수가 최대 20개, 메뉴 조합(course)의 가짓수는 최대 10가지. 문제 풀이에 핵심이 되는 조합과 개수가 엄청 작기 때문에, 해당 문제는 완전 탐색으로 풀 수 있다. 여기서 문제가 되는 것은 메뉴 조합이 구성되는 방식이 "AB", "ABC" , "CDE", "A" 이렇게 정수가 아닌 문자열이기 때문에, 인덱스로 문자열을 사용하기 위해 자료구조 Map을 사용해야 한다. orders에서..

[네트워크/Network] DNS 레코드와 메시지 [내부링크]

자원 레코드(resource record, RR) DNS 서버들은 호스트 이름을 IP 주소로 매핑하기 위해 자원 레코드를 저장한다. 각 DNS는 하나 이상의 자원 레코드를 가진 메시지로 응답 자원 레코드의 구성 4개의 튜플(tuple)로 구성 → {Name, Value, Type, TTL} TTL(time to live) : 자원 레코드의 생존 기간 자원이 캐시에서 제거되는 시간을 결정 Type의 종류 Name과 Value의 의미는 Type에 따른다. 여기서의 서술은 TTL을 무시한 채 작성 Type = A인 경우 Type A 레코드는 표준 호스트 이름의 IP 이름의 IP 주소 매핑을 제공 Name : 호스트 이름 Value : 호스트 이름에 대한 IP 주소 Type A 레코드 예시 → ( relay1...

[네트워크/Network] DNS 서비스와 동작 원리, DNS 캐싱 [내부링크]

DNS: 인터넷의 디렉터리 서비스 호스트 이름(host name) 호스트의 식별자 중 하나 호스트는 IP 주소(IP address)로도 식별됨 예시 : www.facebook.com, www.google.com … 사용 이유(장점) 호스트 이름은 기억하기 쉬워 사용자가 편리함 단점 호스트 이름은 인터넷에서의 호스트 위치에 대한 정보를 거의 제공하지 않는다. 호스트 이름은 라우터가 처리하는데 어려움이 있다. ← 가변 길이의 알파뉴메릭 문자로 구성되어 있기 때문 DNS가 제공하는 서비스 인터넷 디렉터리 서비스(DNS)가 필요한 이유 라우터와 사람의 차이로 인해 호스트 이름을 IP 주소로 변환해 주는 서비스 필요 → 인터넷 DNS(domain name system)의 주요 임무 사람은 기억하기 쉬운 호스트 이..

[네트워크/Network] 전자메일 메시지 포맷과 접속 프로토콜 [내부링크]

메일 메시지 포맷 전자메일을 보낼 때 주변 정보가 포함된 헤더가 메시지 몸체 앞에 오게 된다. 주변 정보는 일련의 헤더 라인에 포함되는데 RFC 5322에 정의되어 있다. RFC 5322는 메일 헤더 라인에 대한 정확한 포맷과 그 의미에 대해 해석을 기술 헤더라인과 메시지 몸체는 빈 줄(CRLF)로 분리됨 각 헤더 라인은 키워드, 콜론 값의 순서로 구성되고, 읽을 수 있는 텍스트를 포함 키워드 중엔 반드시 필요한 것과 선택 사항이 있다. 반드시 필요한 키워드 → From: 헤더 라인과 To: 헤더 라인 선택 사항 키워드 → Subject: 헤더 등 이러한 명령어는 SMTP 명령과는 다르다. From To과 같은 공통 단어가 있긴 함 메일 메시지 포맷의 From To→ 메일 메시지 자체의 일부 SMTP의 ..

[네트워크/Network] 인터넷 메일 시스템 3가지 상위 레벨 개념 [내부링크]

인터넷 전자메일 오늘날 인터넷의 가장 중요하고 널리 사용되는 애플리케이션 중 하나 전자메일은 비동기적인 통신 매체 → 상대방 스케줄과 상관없이 자신이 편할 때 메시지를 보내거나 읽는다. 전자 메일은 분배가 쉽고, 빠르고, 저렴함 전자메일은 HTML 포맷 텍스트, 첨부 메시지, 하이퍼링크, 내장된 사진 등의 특성을 지님 인터넷 메일 시스템의 상위 레벨 개념 3개의 주요 요소가 존재 → 사용자 에이전트, 메일 서버, SMTP 사용자 에이전트(user agent) 사용자가 메시지의 응답, 읽기, 전달, 저장, 구성을 가능하게 함 대표적인 사용자 에이전트의 예시 마이크로소프트 아웃룩, 애플 메일, G-Mail 등 사용자가 메시지를 쓰면, 메시지를 메일 서버로 보냄 → 메시지는 메일 서버의 출력 메시지 큐에 들어..

[네트워크/Network] HTTP/2의 필요성과 HTTP/2 프레이밍(+HTTP/3) [내부링크]

HTTP/2 HTTP/1.1 이후 새로운 첫 번째 HTTP 버전 HTTP/2 가 발표된 이후 2020년 기준 주요 웹사이트 천만 개가 해당 버전을 사용 구글 크롬, 인터넷 익스플로러, 사파리, 오페라, 파이오폭스 등이 지원 HTTP/2는 클라이언트와 서버 간의 데이터 포맷 방법과 전송 방법을 변경 상태 코드, URL, 헤더 필드 등 HTTP 메서드 자체를 변경하진 않음 HTTP/2의 주요 목표 하나의 TCP 연결상에서 멀티플렉싱 요청/응답 지연 시간을 줄이는 것 요청 우선순위화, 서버 푸시, HTTP 헤더 필드의 효율적인 압축 기능 등을 제공 하나의 웹 페이지를 전송하기 위해 병렬 TCP의 수를 줄이는 것 서버를 열고 유지하는데 필요한 소켓을 줄일 수 있다. TCP 혼잡 제어를 제어할 수 있다. But,..

[네트워크/Network] 웹 캐싱(Web Caching)과 조건부 GET [내부링크]

웹 캐싱 웹 캐시(web cache) 기점 웹 서버(origin Web server)를 대신하여 HTTP 요구를 충족시키는 네트워크 개체 프락시 서버(proxy server)라고도 함 웹 캐시는 자체의 저장 디스크를 가지고 있음 → 최근 호출된 객체의 사본을 저장 및 보존 브라우저 웹 캐싱 과정 브라우저는 사용자의 모든 HTTP 요구가 웹 캐시에 가장 먼저 보내지도록 구성될 수 있음 일단 브라우저가 설정되면, 객체에 대한 각각의 브라우저 요청은 웹 캐시에 가장 먼저 보내짐 특정 객체를 요구할 때 발생하는 과정 브라우저는 웹 캐시와 TCP 연결을 설정하고, 웹 캐시에 있는 객체에 대한 HTTP 요청 보냄 웹 캐시는 객체의 사본이 자기에게 저장되어 있는지 확인 저장되어 있는 경우 → 웹 캐시는 클라이언트 브..

[네트워크/Network] 쿠키(Cookie)를 이용한 클라이언트-서버 상호작용 [내부링크]

쿠키를 사용하는 이유 HTTP 서버는 상태를 유지하지 않는다. 때때로 웹사이트가 사용자를 확인해야 할 때가 존재 → 해당 이유로 HTTP는 쿠키(cookie)를 사용 대부분의 주요 상용 웹사이트는 쿠키를 사용하고 있음 쿠키기술의 4가지 요소와 쿠키 동작 방식 쿠키가 가지는 4가지 요소 HTTP 응답 메시지 쿠키 헤더 라인 HTTP 요청 메시지 쿠키 헤더 라인 사용자의 브라우저에 사용자 종단 시스템과 관리를 지속시키는 쿠키 파일 웹 사이트의 백엔드 데이터베이스 쿠키의 동작 과정 가정 해당 사용자는 PC 인터넷 익스플로러를 통해 항상 웹 접속을 한다. PC로 인터넷 익스플로러를 통해 특정 웹사이트(A)를 접속했다. 해당 사용자는 과거에 웹사이트(B)를 방문한 적이 있다. 과정 웹 서버 A에 요청이 들어올 때..

[네트워크/Network] HTTP 메시지 포맷 구조 요약 정리 [내부링크]

HTTP 메시지 포맷 HTTP 명세서(RFC)는 HTTP 메시지 포맷을 정의한다. 브라우저, 웹 서버, 네트워크 캐시 서버에 의해 삽입될 수 있는 헤더라인 정의 두 가지 HTTP 메시지가 존재 → 응답 메시지와 요청 메시지 HTTP 요청 메시지 예시를 통한 요청 메시지 분석 GET /somedir/page.html HTTP/1.1 // 요청 라인(request line) // ---- 헤더 라인(header line) Host : www.someschool.edu // 객체가 존재하는 호스트를 명시 Connection : close // 브라우저는 서버에게 지속 연결 사용을 원하지 않는다. User-agent : Mozilla/5.0 // Mozilla/5.0 = 파이어 폭스 브라우저 Accept-lan..

[운영체제] 시스템 모델과 교착상태(DeadLock) vs 라이브락(LiveLock) [내부링크]

교착 상태(DeadLock) 교착 상태(Dead Lock) : 대기 중인 스레드들이 다시는 그 상태를 변경할 수 없는 경우 한 스레드 집합 내의 모든 스레드가 그 집합 내의 다른 스레드에 의해 발생될 수 있는 이벤트를 기다린다면, 이는 교착 상태임 요청한 자원들이 다른 스레드에 의해 점유되어 있고, 그들도 다 대기 상태에 있기 때문 한 스레드가 자원을 요청했을 때, 그 시각에 요청한 자원을 사용할 수 없는 상황 → 해당 스레드는 대기 상태로 들어간다. 교착 상태가 없는 프로그램을 설계하는 것은 전적으로 프로그래머의 책임 시스템 모델(System model) 시스템은 경쟁 스레드들 사이에 분배되어야 할 유한한 수의 자원들로 구성됨 시스템 자원은 다수의 유형 혹은 클래스로 분할된다. 자원 유형 예시 : CP..

[네트워크/Network] HTTP와 TCP의 이해, TCP 연결 방식 정리 [내부링크]

웹의 등장과 특성 1990년대 초, 새로운 애플리케이션인 월드와이드웹이 등장 가장 큰 장점 → 웹이 온디맨드 방식 온디맨드(On Demand) : 사용자의 요구가 있었을 때 그 요구에 따라 서비스를 제공하는 것 cf ) 라디오 / TV → 콘텐츠 제공자의 주파수를 사용자가 맞춰야 함 이외의 장점 개인이 웹 상에 어떠한 정보를 사용 가능하게 하는 것이 매우 쉬움 → 모든 사람이 매우 낮은 비용으로 발행자가 될 수 있음 하이퍼링크와 검색 엔진은 정보를 얻는데 많은 도움을 준다. 웹과 관련된 프로토콜은 모바일 인터넷 애플리케이션을 위한 플랫폼을 제공 HTTP의 구현 2가지 프로그램으로 구현됨 (클라이언트 프로그램, 서버 프로그램 ) 클라이언트 프로그램 → 각기 다른 종단 시스템에서 수행 클라이언트 프로그램과 ..

[Java/C++] 프로그래머스 Level 2 - 프렌즈4블록 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/17679 카카오 블라인드 코딩테스트 2018년도 문제. 코딩테스트 리뷰를 보니까 난이도 상 문제였다. 문제 핵심 및 풀이 해당 문제는 제한사항에서 완전탐색으로 가능하다는 것을 인지해야 한다. 핵심적인 구현은 2가지가 있다. 1. 2x2에 연결되어 있는 다른 2x2 블록이 같이 터질 수 있도록 하는 것. 2. 블록이 터진 후 비어있는 공간에 위에 있는 블록들이 떨어지는 것. 2x2 블록들이 연쇄적으로 사라지게 하기 일단 2x2 조건을 만족하는 블록들을 찾아내는 것은 쉽다. 무조건 2x2 고정이기 때문에 현재 좌표를 (i, j)라고 한다면 ( i , j ) == ( i , j+1 ) == ( ..

[네트워크/Network] 인터넷 프로토콜과 애플리케이션 계층 프로토콜 [내부링크]

인터넷 전송 프로토콜이 제공하는 서비스 인터넷 애플리케이션 지원 유형 인터넷은 애플리케이션에게 2개의 전송 프로토콜을 제공 → TCP와 UDP 여기서 인터넷은 일반적인 TCP/IP 네트워크를 뜻함 TCP와 UDP는 서로 다른 서비스 모델을 제공한다. TCP 서비스 TCP 서비스 모델은 연결지향적 서비스와 신뢰적인 데이터 전송 서비스를 제공한다. 연결지향형 서비스 - 과정 메시지 전송 전에, TCP는 클라이언트와 서버가 서로 제어 정보를 교환하게 한다. → 핸드셰이킹 과정 클라이언트와 서버에 패킷이 곧 도달한다는 것을 알려주는 역할 핸드셰이킹 과정 이후, TCP 연결이 두 프로세스의 소켓 사이에 존재한다고 칭함 해당 연결은 메시지를 동시에 보낼 수 있기 때문에 전이중(full-duple) 연결 애플리케이션..

[네트워크/Network] 트랜스포트 서비스와 트랜스포트 프로토콜 [내부링크]

애플리케이션이 이용 가능한 트랜스포트 서비스 소켓은 애플리케이션 프로세스와 트랜스포트 프로토콜 간의 인터페이스 전송 과정 송신 측 애플리케이션은 소켓을 통해 메시지를 전송 소켓의 반대편에서 트랜스포트 프로토콜은 네트워크를 통해 해당 메시지를 수신 프로세스의 소켓으로 이동시켜야 함 트랜스포트 프로토콜 대부분의 네트워크는 하나 이상의 프랜스포트 프로토콜을 제공 애플리케이션 개발할 때, 트랜스포트 프로토콜 중 하나를 선택해야 함. 애플리케이션 요구에 가장 적합한 서비스를 제공하는 프로토콜 선택 하나를 선택해야만 하고, 각 전송 모드는 다른 서비스를 제공 트랜스포트 계층 프로토콜이 제공하는 서비스 신뢰적 데이터 전송, 처리율, 시간, 보안 신뢰적 데이터 전송(reliable data transform) 프로토콜..

[Java/C++] 프로그래머스 Level 2 - 거리두기 확인하기 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/81302?language=cpp 카카오 기출문제 중 Level 2 난이도 그림만 많지 문제를 이해하기에는 어렵지 않다. X는 칸막이로 치고 그냥 5x5 맵에 P와 P 사이에 맨해튼 거리를 계산하면 된다. 문제 핵심 및 풀이 키포인트는 5 x 5 맵이 5개 있다는 점. 탐색 범위가 작아 완전 탐색이든 뭐든 시간적인 제약은 없다. 또한 핵심 아이디어는 이 문제가 그래프 탐색을 할 수 있다는 것. 그중에서 편한 방법은 BFS인데, 왜냐하면 BFS를 통해 최단거리를 쉽게 구할 수 있기 때문이다. 이 문제를 왜 BFS로 풀 수 있을까? 맨해튼 거리를 계산하는 것이기 때문이다. 두 점 A와 B의 좌표..

[네트워크/Network] 애플리케이션 구조와 프로세스 간 통신 [내부링크]

네트워크 애플리케이션 개발의 중심 다른 종단 시스템에서 동작하고 네트워크를 통해 서로 통신하는 프로그램을 작성하는 것 예시 웹 어플레케이션의 서버와 클라이언트로 구별되는 두 가지 프로그램 클라이언트 프로그램 : 사용자 호스트에서 실행되는 브라우저 프로그램 사용자 호스트 → 데스크톱, 랩톱, 태블릿, 스마트폰 서버 프로그램 : 웹 서버 호스트에서 실행되는 웹 서버 프로그램 이러한 서버는 종종 데이터 센터에 위치 종단 시스템에만 애플리케이션 소프트웨어가 존재 → 기본 설계 방식 새로운 애플리케이션 개발 여러 종단 시스템에서 실행되는 소프트웨어를 작성해야 함 C, Java, Python 등으로 작성됨 네트워크 코어 장비에서 실행되는 소프트웨어까지 작성할 필요가 없다. 네트워크 코어 장비는 네트워크 계층 및 그..

[Java/C++] 프로그래머스 Level 2 - 순위 검색 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/72412?language=cpp 카카오 코딩테스트에 나온 문제. 문제 이해 자체는 어렵지 않다. 문제 핵심 및 풀이 해당 문제의 포인트 1. 효율성 검사도 하기 때문에 시간복잡도가 중요하다. info의 크기가 50,000까지이고, query의 크기는 100,000까지이다. 이를 O(N)으로 계산한다고 했을 때, 5* 10^5 * 10^4 = 5억 정도라서 O(N)으로 탐색하기에는 아슬아슬하다. 그래서 최적화를 해야 하는 문제이다. 실제로 O(N)으로 푸니까 시간초과가 나온다. O(N)으로 풀었을 때의 시간 복잡도가 얼마인지 모르겠긴 하다. 2. 문자열 분리 해당 문제에서 info는 띄어쓰..

[Java/C++] 프로그래머스 Level 2 - 양궁 대회 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/92342? 카카오 코딩테스트로 나오면 문제인데, 자주 풀어보긴 해야겠다. 문제 핵심 및 풀이 해당 문제의 유형은 제한사항을 보면 알 수 있다. 최대 10발까지 가능하고, 점수도 11개가 끝이다. 충분히 완전탐색으로 풀 수 있는 문제다. 라이언 점수 경우의 수 완전 탐색으로 풀면 되기 때문에, 백트래킹을 떠올렸다. n개의 화살을 11개의 점수에 각각 넣어보면 된다. 여기서 중요한 것은 맞추는 순서는 상관없다는 것이다. 어차피 해당 점수에 맞은 화살 개수만을 따지기 때문에 백트래킹할 때 중복 조합으로 구현해 주면 된다. 점수 계산 점수를 구하는 방법은 간단하다. 모든 점수를 확인해 주면서 어피..

[Java / C++] 프로그래머스 Level 3 - 외벽 점검 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/60062# 카카오 코딩 테스트에 나왔던 문제다. 확실히 문제 이해하기도 복잡하다. 문제 핵심 및 풀이 유형 유추 제한 조건에 보면 외벽의 최대 길이(n)는 200까지이다. 인원을 배치할 수 있는 경우의 수는 200가지이다. 인원은 최대 8명까지 가능하다. 그리고이 결함이 있는 외벽도 15개까지밖에 주어지지 않는다. 계산에 필요한 인원, 외벽, 최대 길이가 굉장히 짧다. O(n^2)을 하더라도 충분하고 O(n^3)도 가능하다. 그래서 완전 탐색이 사용가능하다고 생각했다. 어떻게 하면 외벽 점검을 최소의 인원만 사용할 수 있을까 해당 문제에서 키워드는 외벽이 원형 모양이라는 것이다. 이 말은 ..

[운영체제] 고전적 동기화 문제 - The Dining-Philosophers 문제 [내부링크]

식사하는 철학자들(The Dining-Philosophers) 문제 규칙 가정 5명의 철학자가 원형 테이블을 공유하는 상황 테이블 중앙에는 밥이 있고, 테이블에는 5개의 젓가락이 존재 철학자가 생각(행동) 할 때, 다른 동료들과 상호작용하지 않음 밥을 먹을 때의 규칙 자신에게 가장 가까이 있는 2개의 젓가락을 집으려고 시도 옆 사람이 들고 있는 젓가락은 집을 수 없다. 가까이 있는 2개의 젓가락 → 자신과 자신의 왼쪽 철학자, 그리고 오른쪽 철학자 사이에 있는 젓가락을 뜻함 철학자는 한 번에 한 개의 젓가락만 집을 수 있음 배고픈 철학자가 동시에 젓가락 2개를 집는 경우 젓가락을 놓지 않고 식사를 한다. 식사를 마치면 2개의 젓가락 모두 내려놓고 다시 대기한다. 식사하는 철학자 문제의 의의 고전적인 동기..

[C++] 백준 16973 - 직사각형 탈출 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/16973 NxM 크기의 격자판이 주어지고 크기가 HxW인 직사각형이 주어진다. 이동할 수 있는 칸은 0, 이동할 수 있는 칸은 1로 되어 있다. 직사각형의 가장 왼쪽 위의 칸이 처음에 주어지고, 도착 좌표가 주어진다. 이때 이 직사각형의 왼쪽 위가 도착좌표까지 갈 때 최단거리를 구하는 것 문제 접근 단계 직사각형의 크기가 있다는 점만 제외하고는 벽과 격자판이 존재하고, 특정 지점까지 이동하는 최단 거리를 구해야 한다는 점에서 대표적인 BFS 문제라는 점이라는 것을 알 수 있다. 중요한 것은 직사각형이기 때문에 체크해야 할 부분이 하나가 아니라 여러 개로 늘어난 것인데, 직사각형 왼쪽 위 칸이 도착 지점으로 가야 하므로, 이 문제에..

[운영체제] 고전적 동기화 문제 - 유한 버퍼, Readers-Writers 문제 [내부링크]

고전적인 동기화 문제 많은 클래스의 병행 제어(concurrency control) 문제에 대한 것 해당 문제들로 새로운 동기화 방법을 검증할 수 있음 유한 버퍼 문제(The Bounded-Buffer Problem) 해당 문제는 동기화 프리미티브(primitive)들의 능력을 설명하기 위해 사용 프리미티브 : 프로그래밍 관점에서 해석 이용 가능한 가장 작은 processing의 단위 언어에서 표현의 원자 요소 예 : 덧셈, 뺄셈 → 가장 단순하기 때문에 primitive operation라고 함 소비자와 생산자가 공유하는 자료구조 int n; // n개의 버퍼로 구성된 풀(pool) semaphore mutex = 1; // 상호배제 기능 제공 semaphore emtpy = n; // 비어 있는 버퍼..

[네트워크/ Network] 인터넷의 개념과 프로토콜, 접근 네트워크 [내부링크]

인터넷이란 무엇인가? 2가지 방법이 존재 인터넷의 구성요소를 기술하는 것 인터넷을 구성하는 기본적인 하드웨어와 소프트웨어 구성요소 기술 분산 애플리케이션에서 서비스를 제공하는 네트워킹 인프라스트럭처 관점에서 서술 인프라스터럭처(infrastructure) 컴퓨터와 사용자들을 연결하는 데 사용되는 물리적인 하드웨어를 말한다. ← 정보 기술과 인터넷의 관점으로 본 인프라스럭처 줄여서 “인프라”라고 많이 부름 구성요소로 본 인터넷 중요한 3가지 키워드 인터넷(network of networks) : 네트워크들이 모인 네트워크 프로토콜(protocol) : 네트워크에서 메시지 송수신을 제어하는 일련의 규칙 표준화(Internet standards) : 네트워크는 표준화가 굉장히 중요 종단 시스템(end Syst..

[C++ / Java] 프로그래머스 Level 2 - 가장 큰 정사각형 찾기 [내부링크]

문제 링크 ↓ ↓ ↓ https://school.programmers.co.kr/learn/courses/30/lessons/12905? 1과 0으로 채워진 보드판이 존재한다. 표에서 1로 이루어진 가장 큰 정사각형의 넓이를 출력하는 것이 문제 이때, 보드의 크기는 최대 1000x1000까지 가능하다. 문제 핵심 및 풀이 최악의 경우 반복 횟수 보드의 최대 크기는 1000x1000이다. 그리고 구해야 하는 것은 정사각형의 크기이다. 만약 이를 직접 1의 개수를 세어가면서 구한다면 어느 좌표에서 시작해야 최대 정사각형인지 모르기 때문에 최악의 경우 1000x1000 배열을 전부 훑어야 할 수도 있다. 그런데 각 시작점부터 1의 개수를 세야 하기 때문에 1000 x 1000 x 1000 x 1000 = 10..

[C++ / Java] 프로그래머스 Level 2 - 2 x n 타일링 [내부링크]

문제 링크 ↓ ↓ ↓ https://school.programmers.co.kr/learn/courses/30/lessons/12900 세로 길이가 2이고, 가로길이가 n으로 주어진다. 타일은 2가지 방식 중 하나로만 배치할 수 있다. 1. (1x2) 타일을 가로로 배치하는 경우 2. (2x1) 타일을 세로로 배치하는 경우 가로길이가 n일 때 나올 수 있는 경우의 수를 1,000,000,007로 나눈 나머지를 구하는 문제 문제 핵심 및 풀이 일단 답을 구할 때 1,000,000,007로 나누라고 한 거 보니 경우의 수가 엄청나게 많이 나올 것이라는 것을 예측할 수 있다. 가로( n)가 1일 때부터 나올 수 있는 패턴을 나열해 보자. 1,2,3,5 순으로 개수가 많아진다. 답을 구할 때 1,000,000,..

[운영체제] 락 없는(lock-free) 알고리즘, 동기화 도구 사용 전략 정리 [내부링크]

동기화 도구들은 임계 구역 문제인 상호 배제를 보장하고 라이브니스 문제를 해결하는데 효과적 락 없는(lock-free) 알고리즘 락 없는 알고리즘의 구현 락 없는 알고리즘을 구현하는 이유? → 락 오버헤드 없이 경쟁 조건으로부터 보호하기 위해 락 없는 알고리즘을 구현하기 위해 CAS 명령을 사용하는데 중점을 둠 CAS → compare and swap의 약어 장점 : 락 없는 설루션은 오버헤드가 낮고 확장성이 있기 때문에 인기가 있음 단점 : 알고리즘 자체가 개발 및 테스트가 어려운 경우가 많음 CAS 기반 접근 방식 CAS 기반 접근 방식이 낙관적으로 접근하는 과정 우선 낙관적으로 변수를 갱신 충돌 감지를 사용하여 다른 스레드가 변수를 병행하게 갱신 중인지 확인 갱신 중이라면, 충돌 없이 성공적으로 갱..

[운영체제] 라이브니스(Liveness) 문제 (데드락, 우선순위 역전) 정리 [내부링크]

라이브니스(Liveness) 임계구역 접근을 위해 동기화 도구를 사용할 때 문제 임계구역에 들어가려고 시도하는 프로세스가 무기한 대기할 가능성이 생김 무기한 대기는 진행 및 한정된 대기 2개의 기준을 위반한다. 라이브니스와 라이브니스 실패 프로세스가 실행 수명주기 동안 진행되는 것을 보장하기 위해 시스템이 충족해야 하는 일련의 속성 무기한 대기하는 프로세스는 라이브니스 실패의 한 예시 다양한 형태의 라이브니스 실패 → 결과적으로 성능과 응답성이 나쁜 것이 특징 예시 무한 루프 바쁜 대기 루프 → 라이브니스 실패의 가능성이 있음 특히 프로세스가 임의로 오래 시간 동안 루프 돌고 있는 경우 가능성 높아짐 도구를 통해 상호 배제를 제공하려는 노력이 병행 프로그래밍 환경에선 실패 가능성 존재 도구를 통한 상호 ..

[운영체제] 동기화를 위한 모니터(Monitor) 개념 요약 정리 [내부링크]

모니터를 사용하는 이유 세마포 또는 mutex 락을 이용하여 임계구역 문제를 해결할 때 문제점 → 프로그래머가 세마포를 잘못 사용할 시, 다양한 유형의 오류가 쉽게 발생할 수 있음 이러한 오류 처리를 위해 모니터 사용 전략 : 간단한 동기화 도구를 통합하여 고급 언어 구조물로 제공하는 것 → 모니터 모니터는 근본적인 고급 언어 구조물 중 하나 Java, C# 등의 많은 프로그래밍 언어들이 모니터의 개념을 편입시킴 모니터 사용법(Usage) ADT와 모니터 ADT(추상화된 데이터 형) : 데이터와 해당 데이터를 조작하는 함수들의 집합을 하나의 단위로 묶어 보호 이때 함수의 구현은 ADT의 특정한 구현과는 독립적 모니터 형 : 모니터 내부에 프로그래머가 정의한 일련의 연산자 집합을 포함하는 ADT 이때 모니..

[운영체제] Mutex Lock과 스핀락(Spin lock), 세마포어(Semaphore) [내부링크]

Mutex Locks 만들어진 이유? 임계구역 문제에 대한 하드웨어 기반 해결책은 복잡하고, 응용프로그래머가 사용 불가능 → 임계구역 문제 해결을 간단하게 하기 위해 만들어진 소프트웨어 도구를 개발 Mutex Locks : 상위 수준 소프트웨어 도구 중 하나로, 가장 간단한 도구 임계 구역 보호를 통해 경쟁 조건 방지를 위해 mutex 락 사용 임계 구역에 들어갈 때 락을 획득하고, 빠져나올 때 락을 반환해야 한다. acquire() : 락 획득 release() : 락 반환 Mutex Lock의 구성 available이라는 boolean 변수를 가짐 → 이 변수 값이 락의 가용 여부를 표시 락이 사용 가능하면 acquire() 호출은 성공하고, 락은 사용 불가 상태가 됨 사용 불가 상태의 락을 획득하려..

[C++ / Java] 프로그래머스 Level 2 - 단체사진 찍기 [내부링크]

https://school.programmers.co.kr/learn/courses/30/lessons/1835?language=cpp [A, C, F, J, M, N, R, T] 8개의 알파벳을 나열하는 것을 베이스로 한다. 입력으로 있는 data의 모든 조건에 부합하여 나열할 수 있는 경우의 수가 총 몇 가지가 나오는지 구하는 문제 문제 핵심 및 풀이 해당 문제 풀이의 핵심은 조건의 개수 n이 최대 100개까지라는 점. 그리고 8개의 알파벳을 나열할 때 나올 수 있는 모든 경우의 수는 8! = 40320밖에 되지 않는다는 점이다. 그래서 일단 나올 수 있는 경우의 수는 백트래킹을 구하는 것이 적절하다. 그렇게 줄을 다 세우면, 그다음부터 data에 따라 필터링을 해주면 된다. 필터링 방법은 간단하다...

[C++ / C# ] 프로그래머스 Level3 - 억억단을 외우자 ( 2가지 풀이) [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/138475 1억 x 1억 크기의 행렬이 존재하고, 그 정수 s~e 사이 범위에서 가장 많이 나오는 정수가 뭔지를 알아내는 문제 문제 핵심 및 풀이 제한 사항을 보면 1억 x 1억짜리 행렬은 아니더라도, 최댓값 e가 5,000,000까지 가능하기 때문에 O(n^2) 연산만 해도 바로 시간초과 그리고 O(N) 짜리 연산을 하더라도 모든 starts 값에 대해서 답을 구해준다면, starts의 최대 길이는 100,000이니까 10^5 * 10^6 이어서 역시 시간초과다. 결국 모든 starts의 범위에 대한 값을 미리 구해놓을 수밖에 없다. 즉, 메모라이징 기법을 이용하는 DP 문제라고 대놓고 ..

[C#] SortedSet으로 우선순위 큐 쉽게 구현하기 ( + 다익스트라) [내부링크]

왜 필요할까? C#에서 우선순위큐(Prirority_Queue)는 .NET 7에 새로 생겼다. 이게 문제가 되는 이유는 대표적인 알고리즘 풀이 사이트(백준, 프로그래머스)가 .NET 7 하위 버전이다. 즉, C#으로 알고리즘을 풀 때 우선순위 큐를 사용할 수 없다는 소리다. SortedSet SortedSet에 대해 자세히 다루는 포스팅은 아니기 때문에 우선순위 큐 구현에 필요한 핵심만 말하겠다. SortedSet은 내부의 요소가 자동적으로 정렬된다. 이때 중복 요소는 허용되지 않는다. 원시타입(string,int) 같은 경우, 정렬 기준을 만들지 않으면 자동으로 오름차순으로 정렬되지만 컬렉션,배열 등은 무조건 IComparable 혹은 IComparer를 통해 정렬 기준을 만들어야한다. SortedSe..

[C++ / C# ] 프로그래머스 Level 3 - 등산코스 정하기 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/118669? 여러 출입구, 쉼터, 산봉우리로 왕복하는 코스 중에서 ntensity가 최소인 것을 찾는 문제. 문제 핵심 및 풀이 왕복? 같은 출입구에서 시작하여 산봉우리를 찍고 다시 돌아오는 것이다. 그리고 갔던 길을 다시 가도 된다. 그래서 말이 출입구 - 산봉우리의 왕복이지, 사실상 편도로 계산해도 된다. 왜냐하면 최소의 intensity를 찾았다면, 그 경로 그대로 다시 내려오면 되니까.. 예를 들어, 출입구가 1이고, 4번이 산봉우리라고 하자. 1번 출입구에서 4번 산봉우리까지 도착하는데 줄일 수 있는 intensity가 3이라고 하면 어떤 경로 (1 - a - b - 4) 이런 식..

[C++ / C# ] 프로그래머스 Level 3 - 숫자 타자 대회 [내부링크]

문제 이해 단계 https://school.programmers.co.kr/learn/courses/30/lessons/136797 입력으로 눌러야 하는 숫자가 순서대로 주어지고, 왼손과 오른손 엄지를 가지고 숫자를 눌러야 한다. 각 숫자를 누를 때마다 가중치라는 비용이 드는데 이는 위치에 숫자의 위치에 따라 달라진다. 조건은 아래와 같다. - 이동하지 않고 제자리에서 다시 누르는 것 → 가중치 1 - 상하좌우 인접한 숫자로 이동 → 가중치 1 - 대각선으로 인접한 숫자로 이동 → 가중치 1 - 같지 않고 인접하지 않은 숫자를 누를 때 → 위 규칙을 따라 가중치 합이 최소가 되는 경로 처음에 왼손은 4번, 오른손은 6번에서 시작한다. 이때, 나올 수 있는 가중치의 최소합을 구하는 문제 입력으로는 숫자만 ..

[C++ / C# ] 프로그래머스 Level 3 - 풍선 터트리기 [내부링크]

문제 이해 단계 https://school.programmers.co.kr/learn/courses/30/lessons/68646 일렬로 N개의 풍선이 나열되어 있다. 모든 풍선에는 서로 다른 숫자가 써져 있다. 인접한 풍선 2개를 선택해서 둘 중 하나를 터트리는 행동을 풍선이 최종적으로 1개 남을 때까지 반복한다. 이때, 풍선 2개 중 터트릴 풍선을 선택할 때, 두 풍선 중 번호가 더 작은 것을 터트리는 행동은 최대 1번밖에 할 수 없다. 즉, 횟수 제한이 없는 것은 두 풍선 중 번호가 더 큰 풍선을 터트리는 행동이다. 위의 상황에서 풍선의 번호가 주어질 때, 각 풍선이 최후까지 남을 수 있는지를 확인한다. 그리고 최후까지 남을 수 있는 풍선의 개수를 구한다. 문제 접근 단계 제한 사항에서 얻을 수 있..

[C++ / C#] 프로그래머스 Level 3 - 양과 늑대 [내부링크]

문제 이해 단계 https://school.programmers.co.kr/learn/courses/30/lessons/92343? 이진트리가 있는데, 각 노드에는 양(0) 또는 늑대(1)가 있다. 무조건 루트노드에서 출발하여 양을 획득해야 한다. 루트 노드는 항상 양이다. 획득하는 과정에서 양의 수가 항상 늑대 수보다 많음을 유지해야 한다. 최대한 많은 수의 양을 모아서 다시 루트 노드로 돌아올 때 모을 수 있는 최대 양의 수를 구하는 문제 문제 접근 단계 제한 사항 파악 제한 사항부터 보면 노드(info)는 최대 17개까지이다. 이에 따라, 항상 이진트리를 유지하기 때문에 간선(edges) 또한 100개가 넘어가지 않는다. 즉, 완전 탐색이 가능할 만큼 탐색할 범위가 작음을 알 수가 있다. 움직이는 ..

'하노이의 탑' 알고리즘, 그림으로 쉽게 이해하기(with 재귀) [내부링크]

하노이의 탑(Tower of Hanoi) 문제란? 유례나 역사 같은 것은 다 생략하고, 문제의 조건 같은 본론부터 바로 말하겠다. 3개의 기둥과 이 기둥에 꽂을 수 있는 다양한 크기에 원판들이 존재한다. 맨 처음 시작할 때, 원판의 크기가 큰 것부터 1번 기둥에 모두 쌓는다. 맨 왼쪽 기둥부터 순서대로 1번, 2번, 3번 기둥이라고 한다. 문제에서 요구하는 것은 아래의 조건을 만족하면서, 1번 기둥에 쌓여있는 모든 원판들을 3번 기둥으로 옮기는 것이다. 조건 1. 한 번에 하나의 원판만 옮길 수 있다. 2. 큰 원판이 작은 원판 위에 있어서는 안 된다. N개의 원판이 최소 경로로 이동할 때의 경로를 출력하라는 것이 문제에서 요구하는 것이다. 이 문제를 왜 알아야 할까? 중요한 것은 학습의 목적이다. 프로..

[C++ / C#] 프로그래머스 Level 3 - 가장 긴 팰린드롬 [내부링크]

문제 이해 단계 https://school.programmers.co.kr/learn/courses/30/lessons/12904? 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 팰린드롬이란 앞뒤를 뒤집어도 똑같은 문자열을 뜻한다. 입력으로 문자열 s가 주어질 때, s의 부분 문자열 중에 가장 긴 팰린드롬의 길이를 구하는 문제 문제 접근 단계 제한사항부터 살펴보자. 문자열의 길이 s는 2,500 이하의 자연수이고, 알파벳 소문자로만 구성되어 있다. 팰린드롬이라는 좌우대칭 규칙성을 판단할 때는 보통 스택을 사용하는데, 각 자리마다 스택을 사용하여 넣었다 뺐..

[C++] 백준 9252 - LCS 2 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/9252 9252번: LCS 2 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net LCS는 두 수열이 주어졌을 때, 두 수열의 공통이 되는 부분 수열 중 가장 긴 것을 찾는 문제이다. 가장 긴 수열의 길이를 출력하고, 둘째 줄에 LCS를 출력한다. LCS가 여러 가지일 경우엔 아무거나 출력하고, LCS의 길이가 0인 경우에는 둘째 줄은 출력하지 않는다. 문제 접근 단계 LCS 길이 구하기 [C++] 백준 9251 ..

[C++] 백준 15961 - 회전초밥 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/15961 15961번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 3,000,000, 2 ≤ d ≤ 3,000, 2 www.acmicpc.net 회전 초밥의 개수 N, 회전 초밥의 종류 d, 연속해서 먹을 수 있는 개수 k, 쿠폰 번호 c가 들어온다. 여기서 회전 초밥은 원형으로 시계 방향으로 돌아가는데, 종류가 d개만큼 있다는 것을 의미한다. 시계 방향으로 돌아가는 회전 초밥을 연속해서 k개 먹을 때, 최대한 많은 종류를 먹는 것이 목표이다. 이때, 먹은 k개의 종류 중 쿠폰 ..

[C++] 백준 7579 - 앱 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/7579 7579번: 앱 입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활 www.acmicpc.net N개의 앱이 존재한다. N개의 앱에는 2가지 정보가 들어있는데, (사용 중인 메모리의 바이트 수, 비활성화했을 때의 비용) 2가지이다. M 바이트를 확보해야 하기 때문에, N개의 앱 중 몇 가지를 골라서 비활성화해야 한다. 이때 비활성화 했을 때의 비용을 최소화하여 M 바이트를 확보해야 한다. 최소 비용일 때를 출력하는 문제 문제 접근 단계 제한 사항 분석 앱의 개수(N)는 최대 100개..

[C++] 백준 13460 - 구슬 탈출 2 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net NxM 크기의 맵이 존재하고, 빨간 구슬과 파란 구슬이 존재한다. 맵의 테두리는 모두 벽으로 막혀있고, 하나의 구멍이 존재한다. 목표는 파란 구슬은 구멍은 남겨둔 채 빨간 구슬을 구멍을 통해 빼내는 것. 할 수 있는 동작은 상하좌우로 기울이는 것이다. 기울인다는 것은 해당 쪽에 벽에 닿을 때까지 쭉 흐른다는 것. 예를 들어, 오른쪽..

[C/C++] 이진탐색 - lower_bound, upper_bound 구현 [내부링크]

구현해 보는 이유 C++ 헤더 에 lower_bound와 upper_bound 함수가 있다. 근데 있는 거 두고 굳이 왜 직접 구현해 보는 걸까? 이유는 총 2가지이다. 1. 학습적인 목적(이진탐색 구현) 2. 이진 탐색 변형 이 목적으로 한번 구현해 본다. lower_bound와 upper_bound 메서드 lower_bound lower_bound는 찾고자 하는 값보다 크거나 같은 값이 처음 나타난 곳의 인덱스를 반환한다. 예를 들어서, {2,4,6,7,9}에서 lower_bound를 사용하여 2를 찾는다면 배열에서 2의 인덱스인 0을 반환한다. 또한 5를 찾는다면, 처음으로 5보다 큰 6의 인덱스인 2를 반환한다. upper_bound upper_bound는 찾고자 하는 값보다 큰 값이 처음 나타난..

[C++] 백준 12015 - 가장 긴 증가하는 부분 수열 2 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/12015 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50}인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20 30,50}이고, 길이는 4이다. 문제 접근 단계 특이점 알아내기 가장 긴 ~ 부분 수열 시리즈 문제 항상 비슷하면서 풀이가 다른 게 해당 시리즈 특징이다. 일단 수열..

[운영체제] 프로세스 동기화를 위한 하드웨어 지원 [내부링크]

임계구역 문제를 해결하기 위한 지원을 제공하는 세 가지 하드웨어 명령어를 제시 메모리 장벽(Memory Barriers) 메모리 모델 컴퓨터 아키텍처가 응용프로그램에게 제공하는 메모리 접근 시 보장되는 사항을 결정한 방식 일반적으로 두 가지 범주 중 하나에 속함 강한 순서 : 한 프로세서의 메모리 변경 결과가 다른 모든 프로세서에 즉시 보임 약한 순서 : 한 프로세서의 메모리 변경 결과가 다른 프로세서에 즉시 보이지 않음 메모리 모델은 프로세서 유형에 따라 다름 → 커널 개발자는 공유 메모리 다중 처리기에서 메모리 변경의 가시성에 대한 가정 불가 → 이러한 문제를 해결하기 위해 메모리 장벽을 사용 메모리 장벽 : 메모리의 모든 변경 사항을 다른 모든 프로세서로 전파하는 명령어 이를 통해 다른 프로세서에서..

[운영체제] 프로세스 임계구역(Critical Section)문제와 고전적 해결안 [내부링크]

동기화 도구들이 왜 필요할까? 협력적 프로세스가 데이터를 공유하는 방법 협력적 프로세스 : 시스템 내에 실행 중인 다른 프로세스에게 영향을 주거나 받는 프로세스 논리 주소 공간(코드, 데이터)을 직접 공유, 공유 메모리, 메시지 전달 → 공유 데이터를 동시에 접근하면 데이터의 일관성을 망칠 수 있음 데이터의 일관성을 유지하기 위해 논리 주소 공간을 공유하는 협력적 프로세스의 질서 있는 실행을 보장 프로세스가 병행 또는 병렬로 실행될 때 공유하는 데이터의 무결성에 문제를 일으킴 문제가 발생하는 예시 static int count = 0; // 전역 변수 // 스레드 t1은 count를 1씩 더함 Task t1 = new Task(() => { for (int i = 0; i < 10000; i++) cou..

[C++] 백준 12100 - 2048(Easy) 큐를 이용한 풀이 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 2048이라는 게임이 존재한다. 이 게임 상하좌우 이동 중 하나를 고르는데, 한번 이동할 때 모든 블록이 해당 방향으로 벽이나 다른 블록에 부딪힐 때까지 움직인다. 이때 같은 값을 가지는 두 블록이 충돌하면 두 블록은 하나로 합쳐지면서 값도 하나로 합쳐진다. 한 번 이동할 때 이미 합쳐진 블록은 다른 블록과 다시 합쳐질 수 없다. 이러한 게임에서, Nx..

[C++] 백준 9328 - 열쇠 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/9328 9328번: 열쇠 상근이는 1층 빌딩에 침입해 매우 중요한 문서를 훔쳐오려고 한다. 상근이가 가지고 있는 평면도에는 문서의 위치가 모두 나타나 있다. 빌딩의 문은 모두 잠겨있기 때문에, 문을 열려면 열쇠가 www.acmicpc.net 높이 h와 너비 w를 가진 2차원 맵이 존재한다. 여기서 원하는 것은 문서를 최대한 많이 획득하는 것이다. '. ' : 빈 공간 ' * ' : 벽 ' $ ' : 문서 알파벳 대문자 : 잠겨 있는 문 알파벳 소문자 : 열쇠 해당 문자의 대문자에 해당하는 문을 열 수 있음 처음에는 빌딩 밖에 있고, 빌딩 가장자리의 벽이 아닌 곳을 통해 빌딩 안팎을 드나들 수 있다. 그리고 같은 열쇠를 여러 번 사..

[C++] 백준 10942 - 팰린드롬? [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/10942 10942번: 팰린드롬? 총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다. www.acmicpc.net 팰린드롬은 좌우가 대칭되는 숫자로 이루어진 수열을 뜻한다. 예를 들어 (1,2,3,2,1), (1,3,1) (3) 등이 해당된다. N개의 수열이 주어지고, 총 M개의 (S, E) 쌍이 들어온다. 이는 S번호부터 E번호까지로 이루어진 수열이 팰린드롬인지를 판단하는 것이다. 팰린드롬이면 1, 그렇지 않으면 0을 출력한다. 문제 접근 단계 일단 제한사항부터 살펴보자. 수열의 크기 N은 최대 2,000까지이다. 정수는 최대 1..

[C++] 백준 11049 - 행렬 곱셈 순서 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/11049 11049번: 행렬 곱셈 순서 첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같 www.acmicpc.net 행렬 N개를 곱하는데 곱하는 순서에 따라 값이 달라진다. 행렬 N의 크기가 주어졌을 때 곱셈 연산 횟수의 최솟값을 구하는 문제 곱셈 연산을 하는 방법은 크기가 NxM인 행렬 A와 MxK인 행렬 B가 있을 때 AxB = N x M x K를 크기로 계산한 후 행렬은 N x K가 된다. 입력은 무조건 순서대로 곱셈을 할 수 있는 크기만 입력으로 주어진다. 문제 접근 단계 제..

[C++] 백준 17387 - 선분 교차 2 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/17387 17387번: 선분 교차 2 첫째 줄에 L1의 양 끝 점 x1, y1, x2, y2가, 둘째 줄에 L2의 양 끝 점 x3, y3, x4, y4가 주어진다. www.acmicpc.net 2차원 좌표 평면 위의 2개의 선분 L1과 L2가 주어진다. 두 선분이 교차하는지 아닌지를 판단하는 문제. 교차하면 1, 그렇지 않으면 0을 출력한다. 입력으로 L1의 양 끝 좌표(x1, y1) (x2, y2) L2의 양 끝 좌표 (x3, y3) (x4, y4)가 들어온다. 문제 접근 단계 문제 조건에서 시간제한이 0.25초로 상당히 짧은 것을 볼 수 있다. 그리고 두 좌표를 연결하는 선분 L1, L2이기 때문에 일차함수라는 것을 알 수 있..

[C++] 백준 2252 - 줄 세우기 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net 문제 접근 단계 1번부터 ~N번까지 N명의 학생들을 키 순서대로 줄을 세운다. 입력을 키를 비교한 두 학생의 번호 A, B가 M개 들어온다. 이는 A학생 뒤에 B학생이 서야 한다는 의미이다. 학생들을 앞에서부터 줄을 세운 결과를 출력하는데, 답이 여러 가지인 경우에는 아무거나 하나 골라서 출력한다. 문제 구현 단계 일단 제한사항부터 살펴보..

[C++] 백준 2473 - 세 용액 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/2473 2473번: 세 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 www.acmicpc.net 정수로 되어있는 용액이 N개가 주어진다. 이 중에서 3개를 골라 3개의 합이 0에 가장 가까운 경우를 만들 때, 그때의 세 용액을 찾아서 오름차순으로 출력하는 것이 문제이다. 문제 접근 단계 문제는 상당히 간단한데, 일단 수의 범위랑 제한사항부터 살펴보자. 산성 용액과 알칼리 용액으로 구분해 놨지만, 사실상 용액의 범위는 -1,000,000,000 ~ 1,00..

[C#] 소켓(Socket) 서버(Server) & 클라이언트(Client) 통신 간단한 구현 [내부링크]

서버 DNS 및 Socket 연결 string host = Dns.GetHostName(); IPHostEntry ipHost = Dns.GetHostEntry(host); IPAddress address = ipHost.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(address, 7777); // 최종주소 Socket socket = new Socket(ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); socket.Connect(ipEndPoint); // 해당 ip주소로 연결 요청 Console.WriteLine($"Connect To {socket.RemoteEndPoint.ToSt..

[C++] 백준 1005 - ACM Craft [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1005 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net N개의 건물이 있고, 각 건물마다 먼저 지어져야 하는 건설 순서가 K개 존재한다. 목표로 지어야 할 건물이 있을 때, 해당 건물을 짓는데 걸리는 최소 시간을 알아내는 문제 문제 접근 단계 일단 제한사항부터 살펴보자. 테스트 케이스 T의 개수는 명시되어있지 않다. 그리고 건물의 개수 N은 최대 1,000개 건설 순서 K의 개수와 최대 시간 소요시간은 100,000까지이다. 여기..

[C++] 백준 2096 - 내려가기 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/2096 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net N x 3 짜리 맵이 존재한다. 각 칸에는 0 ~ 9 숫자가 적혀있다. 가장 윗 칸에서 한 칸씩 내려오는데, 내려올 수 있는 방향은 바로 아래 또는 대각 방향밖에 없다. 가장 위에서 아래로 이동할 때 얻을 수 있는 최대 점수와 최수를 구하는 문제 문제 접근 단계 예제 입력을 통해 한번 유형을 찾아보려고 해 보자. 만약 내가 마지막 층(N)행의 2번째 칸인 9를 선택했다고 해보자. 이 입력에서 해..

[C++] 백준 11779 - 최소비용 구하기 2 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/11779 11779번: 최소비용 구하기 2 첫째 줄에 도시의 개수 n(1≤n≤1,000)이 주어지고 둘째 줄에는 버스의 개수 m(1≤m≤100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스 www.acmicpc.net n개의 도시와 m개의 버스가 존재한다. 버스는 A도시에서 출발하여 B도시에 도착하는 정보로 주어진다. 그리고 각 버스마다 드는 비용이 존재한다. 또한 입력으로 출발지와 도착지가 주어질 때, 출발지에서 도착지까지 가는데 드는 최소 비용과 경로를 출력하는 것 문제 접근 단계 일단 문제 조건부터 살펴보자. 도시의 개수 n은 최대 1,000 간선의 개수(버..

[C++] 백준 2448 - 별 찍기 11 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/2448 2448번: 별 찍기 - 11 첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수) www.acmicpc.net N = 24 일 때의 출력이다. 예제를 보고 규칙을 유추하고 별을 찍는 문제 입력 N은 무조건 3 * 2^k로 들어온다. 여기서 k의 범위는 0≤k≤10이다. 문제 접근 단계 별 찍기 시리즈 문제이다. 때문에 구현문제인 것 같은데, 어떤 식으로 구현해야 할까? k의 범위가 0부터 10까지니까 순서대로 해봤다. 이 이상은 그림이 너무 커질 것 같아서 k = 2 일 때까지만 그려보도록 하겠다. 이렇게 k가 1씩 커져갈 때의 규칙을 보면 ..

[운영체제] CPU 스케줄링 알고리즘 평가 방법 정리 [내부링크]

알고리즘의 평가 특정 시스템을 위한 CPU 스케줄링 알고리즘은 어떻게 선택하는가? 알고리즘을 선택하는 데 사용할 기준을 정의 알고리즘을 선택하기 위해 매개변수들의 상대적인 중요성을 반드시 정의해야 한다. 기준은 종종 CPU 이용률, 응답시간 또는 처리량에 의해 정의된다. 기준은 아래와 같은 대책을 포함할 수도 있음 최대 응답 시간은 300ms라는 제약 조건에서 CPU 이용률을 극대화한다. 총 처리 시간이 전체 실행 시간에 평균적으로 선형 비례가 되도록 처리량을 극대화한다. 선택 기준의 정의되면, 여러 가지 알고리즘들을 평가하기를 원한다. → 아래에서 사용할 수 있는 여러 평가 방법들을 기술 결정론적 모델링 분석적 평가(analytic evaluation) 평가 방법의 중요한 부류 중 하나 주어진 작업 부..

[운영체제] 실시간 CPU 스케줄링 개념 및 방식 [내부링크]

실시간 CPU 스케줄링 실시간 CPU 스케줄링은 연성(soft) 실시간 시스템과 경성(hard) 실시간으로 구분 연성 실시간 시스템 중요한 실시간 프로세스가 스케줄 되는 시점에 관해 아무런 보장을 하지 않는다. 오직 중요 프로세스가 그렇지 않은 프로세스들에 비해 우선권을 가진다는 것만 보장 경성 실시간 시스템 태스크는 반드시 마감시간까지 서비스를 받아야 한다. → 더 엄격한 요구 조건을 만족해야 함 마감시간이 지난 이후에 서비스를 받는 것은 서비스를 받지 않는 것과 같다. 지연시간 최소화(Minimizing Latency) 실시간 시스템의 이벤트-중심 특성 시스템은 일반적으로 실시간으로 발생하는 이벤트를 기다린다. 이벤트가 발생하면 시스템은 가능한 한 빨리 그에 응답하고 그에 맞는 동작을 수행해야 한다...

[운영체제] 다중 처리기에서의 CPU 스케줄링 [내부링크]

다중 처리기 스케줄링 여러 개의 CPU가 사용 가능 → 여러 스레드가 병렬로 실행 가능 → 부하 공유(load sharing) 가능 스케줄링 문제는 그에 상응하여 더욱 복잡해짐 다중 처리기란? 여러 개의 물리적 프로세서를 제공하는 시스템 각 프로세서에는 하나의 단일 코어 CPU가 포함되어 있음 최신 컴퓨팅 시스템에서의 다중 처리기는 아래의 아키텍처들을 사용 가능 다중 코어 CPU 다중 스레드 코어 NUMA 시스템 이기종 다중 처리 다중 처리기 스케줄링에 대한 접근 방법 다중 처리기 시스템의 CPU 스케줄링에 관한 해결 방법 비대칭 다중 처리(asymmetric multiprocessing) 마스터 서버라는 하나의 처리기가 모든 스케줄링 결정과 I/O 처리, 다른 시스템의 활동을 취급 다른 처리기들은 사용..

[C++] 백준 13172 - ∑ [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/13172 13172번: Σ 모듈러가 11에서 1,000,000,007이 되어 답이 달라졌지만, 역시 3을 곱한 다음 1,000,000,007으로 나눈 나머지는 7이 된다. www.acmicpc.net 문제가 거의 비문학 지문이다. 여기서 문제 풀이에 필요한 정보만 뽑아보자. 1. 각 주사위에서 얻을 수 있는 기댓값은 a * b^(-1) modX를 계산해야 한다. 여기서 a는 모든 면에 적힌 숫자의 합이고, b는 주사위 면에 개수이다. 2.b^(-1)는 b의 모듈러 곱셈에 대한 역원인데, 구하는 방법은 b^(X-2) = b^(-1) modX이다. 3. 모든 주사위를 한 번씩 던졌을 때 나온 숫자들의 합의 기댓값을 얻기 위해서는 각 ..

[C++] 백준 12851 - 숨바꼭질 2 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net X좌표로만 이루어진 맵이 존재한다. 출발점 N과 도착점 K가 입력으로 들어온다. 출발점 N에서 할 수 있는 움직임은 총 3개이다. 1. X+1 2. X-1 3. X*2 3개의 움직임을 적절히 조합해서 도착점 K까지 갈 수 있는 가장 빠른 시간을 구하고, 가장 빠른 시간으로 갈 수 있는 경우의 수를 출력하는 문제 문제 접근 단계 숨바꼭질 시리즈 ..

[C++] 백준 11054 - 가장 긴 바이토닉 부분 수열 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/11054 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net 바이토닉 수열이란 어떤 수를 A라고 했을 때, a < b < c < A > d > e > f.. 이런 식으로 이루어져야 한다. 수열 A가 입력으로 들어올 때 그 수열의 부분이 바이토닉 수열이면서, 가장 긴 수열의 길이를 구하여 그 길이를 출력해라. 문제 접근 단계 가장 긴 ~~ 수열 시리즈 문제이다. 일단 제한사항부터 살펴보면, 수열의 길이는 최대 1000까지이다. 만약 시간복잡도가 O(n^2)까지 ..

[C++] 백준 9935 - 문자열 폭발 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 첫 번째 줄에 문장이 주어지고, 두 번째 줄에 폭발 문자열이라는 특정 키워드가 주어진다. 문장에서 폭발 키워드가 있으면 그 부분을 지운다. 그리고 문장을 이어 붙인다. 문장을 이어 붙였을 때 또 키워드가 완성된다면 그 부분을 지운다. 이런 식으로 모든 폭발키워드를 지운 후, 남은 문장을 출력한다. 문제 접근 단계 제한사항부터 보자. 문장의 길이는 최대 1,000,00..

[네트워크/Network] 무선 랜과 SSID의 구조 정리 [내부링크]

무선 랜의 구조 무선 랜이란? 무선 랜은 케이블을 사용하지 않고 전파를 이용하여 무선으로 컴퓨터를 연결 단점 유선보다 속도가 불안정하고 전파가 약하면 연결이 잘 안 됨 유선랜에 비해 통신 내용이 해킹될 위험이 높다 → 암호화나 인증 설정이 필요 무선 랜 구성 무선 액세스 포인트(WAP)와 무선 클라이언트(컴퓨터나 스마트폰)로 구성 무선 공유기에 무선 액세스 포인트 기능이 포함 컴퓨터가 무선 액세스 포인터와 통신하기 위해선 무선 랜 칩과 무선 랩 어댑터가 필요 최근에 나온 컴퓨터는 대부분 무선 랜 칩을 내장하고 있다. 무선 랜 어댑터 USB 메모리 방식 어댑터 컴퓨터 카드 방식 어댑터 인프라스트럭처 방식과 애드혹 방식이란? 인프라스트럭처(infrastructure) 방식 무선 액세스 포인터를 통해 통신하는..

[C++] 백준 1504 - 특정한 최단 경로 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1504 1504번: 특정한 최단 경로 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존 www.acmicpc.net 입력으로 정점의 개수 N과 간선의 개수 E가 주어진다. 여기서 간선은 양방향 그래프이다. 정점 1에서 정점 N까지 최단경로로 움직여야 하는데, 무조건 타깃으로 설정한 정점 A와 정점 B를 방문해야 한다. 여기서는 한번 이동했던 간선도 다시 이동하는 것을 허락한다. 이러한 조건일 때 두 정점을 반드시 거치면서 최단 경로로 이동할 때의 값을..

[C++] 백준 11444 - 피보나치 수 6 (행렬 풀이 X) [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/11444 11444번: 피보나치 수 6 첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 피보나치 수열이 존재한다. n이 입력으로 들어올 때, n번째 수열의 값을 구하는 것이 문제. 문제 접근 단계 이 문제가 골드 2인 데는 제한사항 때문이다. 입력으로 들어올 수 있는 n이 10^18까지 가능하다. 엄청나게 크다. int 자료형으로는 절대 받을 수 없고 가장 큰 자료형인 long long int를 써야지만 받을 수 있다. 기존에 풀던 DP방식으로 문제를 풀면 시간 복잡도가 O(n)이 나온다. 이는 결국 1초가 넘어 시간초과가 나오기 때문에 다른 ..

[운영체제] CPU 스케줄링 알고리즘과 스레드 스케줄링 [내부링크]

스케줄링 알고리즘 CPU 스케줄링은 준비 큐에 있는 프로세스 중 어떤 프로세스에 CPU 코어를 할당할 것인지를 결정 여러 가지 다른 CPU 스케줄링 알고리즘이 존재 여기서의 스케줄링 알고리즘은 처리 코어가 하나뿐이라고 가정하고 설명 → 즉 한 번의 하나의 프로세스만 실행할 수 있다는 뜻 선입 선처리 스케줄링(FCFS) 방식 : CPU를 먼저 요청하는 프로세스가 CPU를 먼저 할당받는다. 가장 간단한 CPU 스케줄링 알고리즘 코드 작성과 이해가 쉽다. 선입 선처리 정책의 구현은 선입선출(FIFO) 큐로 쉽게 관리 가능 프로세스가 준비 큐에 진입하면, 이 프로세스의 프로세스 제어블록(PCB)을 큐의 끝에 연결 CPU가 가용 상태가 되면, 준비 큐의 앞부분에 있는 프로세스에 할당 해당 프로세스(실행 상태의 프..

[C++] 백준 1022 - 소용돌이 예쁘게 출력하기 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1022 반시계 방향으로 돌아가는 소용돌이를 구현해야 한다. 특이한 점은 음수 좌표까지 존재하고 이미 그림 상의 좌표는 지정해 놨고 위치도 이미 정해져 있다는 것이다. 우리가 해야 할 것은, 가장 왼쪽 위 칸(r1, c1)과 가장 오른쪽 아래 칸(r2, c2) 사이에 있는 사각형 영역을 출력하는 것이다. 출력을 할 때는 왼쪽에 공백을 넣어 오른쪽에 공백을 넣어 출력해야 한다 문제 접근 단계 해당 문제에서 고려해야 할 점이 많다. 반시계로 도는 소용돌이 구현 이러나저러나 결국에는 반시계로 도는 소용돌이를 구현해야 해당 문제를 풀 수 있다. 위에서 정해준 (0,0) 좌표에서 시작하여 반시계방향으로 도는 소용돌이를 만드는 방법을 생각해 ..

[C++] 백준 1629 - 곱셈 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 입력으로 A, B, C가 들어온다. 자연수 A를 B번 곱하고, C로 나눈 나머지를 출력해라. 문제 접근 단계 상당히 간단한 문제로 보인다. 하지만 그렇지 않다. 여기에는 2가지의 문제점이 존재한다. 첫 번째는, 수의 범위이다. 제한사항을 보면 입력이 2,147,483,647까지다. 입력부터 20억이 넘어가기 때문에 20억^20억 long long int 자료형을 아득히 넘어간다. 그렇기 때문에 지수를 한 번에 곱해서 구해서는 안된다. 자료형을 넘..

[C++] 백준 2263 - 트리의 순회 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/2263 이진트리의 정점이 1~n까지의 번호가 중복 없이 매겨져 있다. 이진트리의 중위 순회와 후위 순회가 입력으로 주어질 때, 전위 순회를 출력하는 문제 문제 접근 단계 이 문제를 풀기 위해서는 기초적으로 이진트리의 개념과 전위, 중위, 후위 순회의 개념과 특성을 미리 알고 있어야 한다. 전위 순회 : 루트 → 왼쪽 → 오른쪽 중위 순회 : 왼쪽 → 루트 → 오른쪽 후위 순회 : 왼쪽 → 오른쪽 → 루트 그림을 보면서 하는 것이 가장 빠르다. 해당 그래프로 중위 순회와 후위 순회를 돌려보면, 중위 순회 : 7 3 8 1 9 4 10 0 11 5 2 6 후위 순회 : 7 8 3 9 10 4 1 11 5 6 2 0 이 된다. 우리는 ..

[네트워크/Network] 응용계층 역할 및 정리(HTTP,DNS,메일서버) [내부링크]

여기서의 응용계층은 5 계층의 세션 계층과 6 계층의 표현 계층을 포함하는 것을 생각 응용 계층의 역할 애플리케이션(응용 계층에서 동작)은 클라이언트와 서버로 나눌 수 있음 클라이언트 : 서비스를 요청하는 측(사용자 측) 서버 : 서비스를 제공하는 측 사용자 측의 요청을 전달하기 위해 통신 대상이 이해할 수 있는 메시지로 변환하고 전송 계층에 전달하는 역할 클라이언트 애플리케이션과 서버 애플리케이션이 통신하기 위해선 응용 계층의 프로토콜이 필요 응용 계층에서 사용하는 대표적인 프로토콜 HTTP - 웹사이트 접속 FTP - 파일 전송 SMTP - 메일 송신 POP3 - 메일 수신 DNS - 이름 해석 이름 해석 : 네트워크에서 컴퓨터나 네트워크 장비 이름으로 IP 주소를 알아내는 것 응용 계층은 각각의 애..

[네트워크/Network] 전송계층의 역할과 TCP 분석 ( + UDP) [내부링크]

전송 계층의 역할 물리 계층, 데이터 링크 계층, 네트워크 계층만 있으면 목적지에 데이터를 보낼 수 있음 → 하지만 데이터 손상 또는 유실 시 이 계층들에서는 아무것도 못함 → 전송 계층의 존재 이유 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요 전송 계층의 2가지 기능 오류를 점검하는 기능 오류가 발생하면 데이터를 재전송하도록 요청 데이터가 제대로 도착했는지 확인 cf. 네트워크 계층 → 목적지까지 데이터를 전달하는 것 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능 컴퓨터가 데이터를 받아도 어떤 애플리케이션에 전달해야 하는지 모르면 안 됨 예 : 홈페이지용 데이터인데 메일 프로그램에 전달하면 안 됨 연결혈 통신과 비연결형 통신 전송 계층의 특징 → 신뢰성/정확성과 효율성 신뢰성/정..

[C#] 하드웨어 최적화 - 메모리 베리어(Memory Barrier) [내부링크]

사용하는 이유 CPU가 코드 재배치 public class Program { static int x = 0; static int y = 0; static int r1 = 0; static int r2 = 0; static void Thread1() { y = 1; r1 = x; } static void Thread2() { x = 1; r2 = y; } static void Main(string[] args) { while (true) { x = y = r1 =r2 = 0; Task task1 = new Task(Thread1); Task task2 = new Task(Thread2); task1.Start(); task2.Start(); Task.WaitAll(task1, task2); // 두 쓰레드..

[C++] 백준 22861 : 폴더 정리(large) [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/22861 main 폴더 안에 있는 폴더의 총 개수 N과 파일의 총 개수 M이 주어진다. 그리고 폴더를 옮기는 횟수 K가 주어진다. 폴더를 옮긴다는 것은 폴더 A에 있던 하위 폴더와 파일들을 모두 폴더 B로 옮긴다는 것 그리고 마지막에 쿼리 Q가 주어지고, 그 쿼리에 맞는 파일의 종류가 몇 개인지, 그리고 파일의 수가 몇 개인지 출력하는 문제 사실 문제가 상당히 길기 때문에 링크를 타고 들어가서 문제를 읽고 오는 편이 낫다. 문제 접근 단계 입력으로 들어오는 것이 많다. 그렇기 때문에 더더욱 제한사항부터 살펴봐야 한다. 폴더(N)와 파일(M)의 개수는 최대 1,000개까지 가능하다. 파일을 옮기는 횟수(K)도 최대 1,000회까지 ..

[C++] 백준 9663 - N-Queen [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/9663 NxN짜리 체스판에 N개의 퀸을 서로 공격하지 못하게 둔다. N이 주어졌을 때 이 경우의 수를 구하는 문제 문제 접근 단계 퀸이 움직일 수 있는 경로는 위와 같다. 퀸을 정가운데 놨을 때, 노란색 영역에는 퀸을 두면 안 된다. 제한사항부터 알아보면, N은 최대 14까지 가능하다. 이 말은 맵은 14x14까지, 체스 말은 14개까지 가능하다는 것이다. N이 상당히 작기 때문에 완전탐색이 가능할 것 같다. N개의 퀸을 체스판에 두는 모든 경우의 수를 구해야 하기 때문에 퀸을 모든 곳에 둬서 판단하는 방법밖에 없다. 그런데 일반적인 백트래킹으로 이를 확인하기에는 최대 14^14로 대략 100억이 넘어가기 때문에 제한시간 10초를..

[C++] 백준 1167 - 트리의 지름 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1167 입력으로 트리의 정점 개수 V와 간선의 정보가 주어진다. 트리의 간선에는 가중치가 존재한다. 임의의 두 정점 사이의 거리 중 가장 긴 것의 길이를 출력하는 문제 문제 접근 단계 문제 조건부터 살펴보면, 정점의 개수가 최대 100,000개다. 그렇다면 간선의 개수는 훨씬 더 많이 가능하다는 소리이다. 모든 정점을 일일이 하나씩 다 살펴보기에는 무리이다. 한 정점을 특정하여 찾는 방법밖에 없는 것 같다. 두 정점 사이의 길이가 가장 길어지려면? 트리에서 두 정점의 길이가 가장 길어지려면 어떻게 해야 할까? 당연히 한쪽 끝노드(리프 노드)에서 끝노드로 가는 것이 길이가 가장 길어질 것이다. 즉 우리가 우선적으로 찾아야 할 것은 ..

[운영체제] 쓰레딩 관련 문제(신호 처리,LWP,취소,TLS 등) 정리 [내부링크]

Fork() 및 Exec() 시스템 콜 다중 스레드 프로그램에서는 fork()와 exec()의 의미가 달라질 수 있다. fork()에 대한 질문 - 한 프로그램의 스레드가 fork()를 호출했을 때 새로운 프로세스는 모든 스레드를 복제해야 하는가? 한 개의 스레드만 가지는 프로세스여야 하는가? 몇몇 UNIX 기종은 두 가지 버전의 fork()를 다 제공 두 버전 중 어느 쪽을 택할 것인지는 응용프로그램에 달려 있음 exec() 시스템 콜을 부를 때 exec()의 매개변수로 지정된 프로그램이 모든 스레드를 포함한 전체 프로세스를 대체 fork()를 부르자마자 다시 exec를 부르면 모든 스레드를 복제해서 만들어주는 것은 불필요 ← exec에서 지정한 프로그램이 곧 모든 것을 다시 대체할 것이기 때문 이 경..

[C++] 백준 2638 - 치즈 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/2638 NxM 크기의 맵에 1로 표기된 치즈가 있다. 치즈는 외부 공기와 두 번 이상 접촉하면 녹는다. 겉에서부터 치즈가 녹아내릴 때, 모든 치즈가 녹아내리는 데 걸리는 시간을 구하는 문제 문제 접근 단계 문제의 조건부터 살펴보자. 맵의 크기는 최대 100x100까지 가능하다. 맵의 크기는 그렇게 크지 않아서, 탐색을 하기에는 무리가 없을 것 같다. 문제의 유형 문제의 유형을 추측해 볼 때, 2차원 맵이 주어지고, 치즈가 없어지는 조건이 네 면 중 2 변이 접촉해야 하는 것이라고 했다. 이를 그림에서 살펴보면, 1이 없어지기 위해서는 겉에 있는 0과 2개 이상 인접해야 한다. 이를 쉽게 알아내기 위해서는 너비우선탐색(BFS)으로 ..

[C++] 백준 1043 - 거짓말 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1043 사람 수 N과 파티의 수 M이 주어진다. 그다음줄에는 진실을 아는 사람의 번호가 주어지는데, 지민이는 모든 파티를 참석하면서 거짓말을 쳐야 한다. 하지만 진실을 아는 사람이 있는 파티에서는 무조건 진실을 말해야 한다. 진실을 들은 사람이 거짓말을 듣거나, 거짓말을 들은 사람이 진실을 들으면 이는 실패한 것이다. 해당 조건에서 지민이가 거짓말을 칠 수 있는 파티의 최대 수를 구하는 문제 문제 접근 단계 문제의 제한조건부터 살펴보자. 사람의 수 N과 파티의 수 M이 모두 50까지 가능하다. 상당히 작은 숫자라서, 완전 탐색이나 원하는 대로 풀이가 가능할 것 같다. 문제의 특징 이 문제의 특징적인 점은, 옳고 그름을 판단하기 위..

[운영체제] 암묵적 스레딩(implicit Threading) 개념 정리 [내부링크]

암묵적 스레딩 암묵적 스레딩(implicit Threading) 스레딩의 생성과 관리 책임을 앱 개발자로부터 컴파일러와 실행시간 라이브러리에게 넘기는 것 앱 설계의 어려움을 극복하고 병행 및 병렬 앱 설계를 도와주는 방법 응용 프로그램 개발자가 병렬로 실행할 수 있는 스레드가 아닌 작업을 식별해야 함 작업은 일반적인 함수로 작성 런타임 라이브러리는 다대다 모델을 사용하여 별도의 스레드에 매핑 암묵적 스레딩 장점 개발자는 병렬 작업만 식별하면 된다. 라이브러리는 스레드 생성 및 관리에 대한 특정 세부사항을 결정 스레드 풀 다중 스레드 서버는 아직 여러 문제를 지님 스레드를 생성하는데 소요되는 시간 생성된 스레드가 단기 작업(곧 폐기될 스레드)이라면 더 문제가 됨 모든 요청마다 새 스레드를 만든다면, 동시 ..

[C#] 쓰레드(Thread)와 쓰레드 풀(Thread Pool) 다루기( + Task) [내부링크]

Thread Thread 생성 using System; using System.Threading; // 추가해줘야 사용 가능 namespace ServerCore { public class Program { // 사용할 함수(쓰레드) static void MainThread() { Console.WriteLine("Create Thread"); } static void Main(string[] args) { //Thread 이름 = new Thread(함수 이름); Thread thread = new Thread(MainThread); thread.Start(); } } } using System.Threading을 추가해 줘야 사용이 가능하다. thread.Start()를 해야 만들어둔 thread가 ..

[C++] 백준 1238 - 파티 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1238 N개의 마을에 연결된 M개의 단방향 도로가 존재한다. 각 도로에는 오고 가는 시간(비용)이 존재한다. N개의 마을 중 특정 마을 X로 왕복해야 하는데, 어느 마을에서 출발하는 것이 가장 시간이 오래 걸리는가? 그때의 소요 시간을 구하는 출력하는 문제 문제 접근 단계 문제 유형 유추 N개의 마을에 연결된 M개의 단방향 도로라는 말을 읽자마자 바로 그래프 탐색이 떠올랐다. 마을을 정점으로 치환하고, 단방향 도로를 단방향 간선으로 본다. 그리고 걸리는 시간을 각 간선의 가중치로 보면 완벽한 그래프 탐색 문제이다. 로직 어쨌든 이 학생들은 무조건 최단 거리로 오고 간다고 했다. 그래프 탐색에서 최단거리라고 하면 생각나는 것이 크루..

[C++] 백준 13905 - 세부 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/13905 섬 위에 N개의 집과 M개의 다리가 존재한다. 그리고 각 다리에는 무게 제한 K가 걸려있다. 입력으로 출발지와 목적지가 주어지는데, 혜빈이는 최대한 많은 금빼빼로를 들고 목적지까지 도착해야 한다. 각 다리에서 무게제한까지만 빼빼로를 들 수 있을 때 최대 몇 개까지 빼빼로를 옮길 수 있는가? 문제 접근 단계 제한사항부터 살펴보자. 존재하는 집의 수(N)는 100,000개, 다리의 수(M)는 300,000이다. 최대 10^5 * 10^5 = 10^10으로 완전탐색으로 하면 시간초과가 뜬다. 따라서 하나하나 비교하는 것은 안되고, 다른 방법이 필요하다. 그래프 탐색 결국엔 집과 집을 연결하는 것이 다리고, 그 다리에는 무게라는..

[C++] 백준 21941 - 문자열 제거 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/21941 소문자 문장 S가 주어지고, 문자열 리스트들이 주어진다. 각 문자열 리스트들은 각자 점수를 가지고 있다. 문장 S에서 모든 문자들을 지워야 하는데 아래 2가지 연산만 할 수 있다. 1. 문자열 리스트에 존재한다면 해당 부분을 지우고 그 문자열만큼의 점수를 얻는다. 2. 문자 하나를 지우고 1점을 얻는다. 해당 연산을 통해 모든 문자를 지울 때 얻을 수 있는 최댓값을 구하는 문제 문제 접근 단계 범위 파악 문제 조건부터 살펴보자. 문장 S는 최대 1000개까지, 문자열 리스트는 100개, 그리고 점수는 개당 10,000점까지 가능하다. 만약 문장의 길이가 1000이고, 문자열이 하나로 구성된, 개당 10,000점짜리가 10..

[C++] 백준 17141 - 연구소 2 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/17141 17141번: 연구소 2 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 승원이는 연구소의 특정 위치에 바이러스 M개를 놓을 것이고, 승원이의 신호와 동시에 바이 www.acmicpc.net NxN 크기의 맵에 M개의 바이러스를 놓으려고 한다. 바이러스는 맵에 ' 2 '라고 표시되어 있는 곳에 밖에 놓지 못한다. 바이러스는 1초당 상하좌우로 인접한 모든 빈칸(1이라고 적힌 칸을 제외)한 칸으로 퍼진다. M개의 바이러스를 배치하여 최소한의 시간으로 모든 맵에 바이러스를 퍼뜨릴 때, 이 최소 시간은? 만약 모든 맵에 바이러스를 퍼뜨릴 수 없다면 -1을 출력한다. 문제 접근 단계 문..

[C++] 백준 16562 - 친구비 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/16562 16562번: 친구비 첫 줄에 학생 수 N (1 ≤ N ≤ 10,000)과 친구관계 수 M (0 ≤ M ≤ 10,000), 가지고 있는 돈 k (1 ≤ k ≤ 10,000,000)가 주어진다. 두번째 줄에 N개의 각각의 학생이 원하는 친구비 Ai가 주어진다. (1 ≤ Ai ≤ 10, www.acmicpc.net N명이 학생이 있고 그 학생들 사이에 M개의 친구 관계가 존재한다. 그리고 각각의 학생마다 친구비가 존재하는데, 친구 관계인 친구였다면 그중 하나에게만 지불하면 된다. 해당 조건으로 K원을 가지고 있을 때, N명 학생과 모두 친구를 맺을 수 있는 최소 비용을 구하시오. 만약 구할 수 없으면 "Oh no"를 출력한다..

[C++] 백준 1719 - 택배 ( 다익스트라 풀이 ) [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1719 1719번: 택배 명우기업은 2008년부터 택배 사업을 새로이 시작하기로 하였다. 우선 택배 화물을 모아서 처리하는 집하장을 몇 개 마련했지만, 택배 화물이 각 집하장들 사이를 오갈 때 어떤 경로를 거쳐야 하 www.acmicpc.net n개의 정점과 m개의 간선이 존재한다. 그리고 간선 사이에는 가중치가 존재한다. 모든 정점에서 다른 정점으로의 경로표를 만들어야 한다. 한 정점에서 다른 정점으로 최단경로로 움직일 때, 거쳐야 하는 다른 정점을 경로표에 적어 넣는다. 그리고 경로표 전체를 출력하는 것이 해당 문제이다. 문제 접근 단계 로직 유추 문제를 보면 바로 정점과 간선이 있는 그래프를 준다. 이 점을 보니 바로 그래프..

[C++] 백준 1726 - 로봇 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1726 1726번: 로봇 많은 공장에서 로봇이 이용되고 있다. 우리 월드 공장의 로봇은 바라보는 방향으로 궤도를 따라 움직이며, 움직이는 방향은 동, 서, 남, 북 가운데 하나이다. 로봇의 이동을 제어하는 명령어는 www.acmicpc.net MxN짜리 맵에 입력으로 출발 좌표와 목적 좌표가 주어진다. 출발지에서 로봇이 출발하는데 로봇이 할 수 있는 행동은 아래의 2가지이다. 로봇을 목적지에 도착시키고, 원하는 방향을 바라보게 하는데 걸리는 최소 명령 횟수를 구하는 문제 문제 접근 단계 맵의 크기는 최대 100 x 100 까지만 가능하다. 그렇게 크지는 않다. 탐색으로 인한 시간초과는 그렇게 신경 쓰지 않아도 되는 걸로 보인다. ..

[C#] Nullable(널러블)이란? + 사용법 [내부링크]

Nullable이란? Nullable은 Null + able의 합성어로 C#에서 제공하는 새로운 문법이다. Nullable은 변수형 타입을 의미하는데, 변수형을 Nullable로 만들면 값으로 Null을 가지지 못하는 변수형도 Null 값을 가질 수 있다. 사용 방법 ? 키워드 사용 방법은 간단하다. public static void Main(string[] args) { //선언하는 방법 int? ex1 = null; bool? ex2 = null; float? ex3 = 3f; // 값 수정 ex1 = 3; ex2 = true; ex3 = 4.0f; // 값 대입 int a = ex1.Value; //값 호출하는 방법 Console.WriteLine($"ex1 :{ex1.Value}"); Consol..

[C++] 백준 16432 - 떡장수와 호랑이 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/16432 호랑이에게 N일 동안 떡을 줘야 한다. 떡을 줄 때 이틀 연속해서 같은 번호의 떡을 주어선 안된다. 떡의 종류는 1~9번까지 총 9개가 존재한다. 입력으로 N일이 들어오고, 그다음 줄부터 i번째 날의 가져갈 떡의 수 m과 떡의 종류가 주어진다. 호랑이에게 떡을 줄 수 있는 경우엔 여러 가지 경우의 수 중 하나를 출력하고, 그렇지 않은 경우엔 -1을 출력한다. 문제 접근 단계 제한사항부터 살펴보면, N(일)의 최대는 1,000이다. 떡의 종류는 최대 9개까지 가능하다. 아이디어 처음에는 당연히 연속되는 경우를 제외하고, 모든 종류를 하나씩 살펴보는 백트래킹 방식을 사용하려고 했는데 이 방식은 8^1,000이 되기 때문에 시..

[C#] 델리게이트(Delegate)와 이벤트(Event)의 필요성 및 사용법 [내부링크]

델리게이트(Delegate) - 대리자 용도 델리게이트를 사용하면 함수 자체를 인자로 넘겨준 후, 그 함수를 호출하여 사용할 수 있다. public class EmptyClass { static void Receive(/* 함수를 인자(매개변수)로 넘겨받음*/) { // 인자로 넘겨받은 함수 실행 } public static void Main(string[] args) { Receive(/* 매개변수로 넘기길 원하는 함수 */); } } Receive 함수의 매개변수로 특정 함수가 들어간 뒤, 이를 Receive 함수에서 호출할 수 있다는 것이다. 델리게이트 필요성 근데 이런 짓을 왜 하는 것일까? 그냥 Receive 함수 안에 실행하려는 함수를 넣거나, 코드를 넣으면 안 되나?? 유니티 개발 환경에서 ..

[C#] 얕은(Shallow) 복사와 깊은(Deep) 복사 이해하기 [내부링크]

지난 포스팅에서 이어서 설명한다고 했던 깊은 복사에 대해 다루려고 한다. 깊은 복사에 대해 이야기하면 필연적으로 얕은 복사와 함께 이야기하는데, 얕은 복사와 깊은 복사를 비교해 보며 알아보자. 정의 정의적인 부분부터 살펴보자. 얕은 복사 복사하려는 원본에 대한 새로운 객체(복사본)를 생성하는데, 이 객체는 원본 객체를 참조한다. 즉, 생성된 복사본은 원본 객체가 가리키는 주소와 같은 곳을 가리키게 된다. 그렇기 때문에 복사본은 원본 객체에 종속적이다. 이는 주소에 의한 참조랑 비슷한 의미로 생각해도 된다. 깊은 복사 얕은 복사와 같이 원본에 대한 복사본을 생성하는데, 인스턴스화할 수 있는 모든 요소(내부의 클래스 변수, 메서드, 인스턴스 값 등)를 모조리 복사한다. 그렇게 하여 원본 객체로부터 완전히 독..

[C++] 백준 1823 - 수확 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1823 1823번: 수확 첫째 줄에 벼의 개수 N(1 ≤ N ≤ 2,000)이 주어지고 두 번째 줄부터 N+1번쨰 줄까지 벼의 가치 v(i) (1 ≤ v(i) ≤ 1,000) 가 주어진다. www.acmicpc.net 일렬로 나열되어 있는 정수가 1 ~ N까지 존재한다. 이 숫자들을 얻기 위해서는 양끝부터 얻어야 한다. 숫자를 얻었을 때 이익은 다음과 같다. 이익 = 숫자*(고른 순서) 해당 조건과 같을 때 얻을 수 있는 가장 최대의 이익을 구하는 문제 문제 접근 단계 벼의 개수는 최대 2,000개까지, 그리고 정수는 최대 1,000까지 가능하다. 일단 정수를 양쪽 끝에서부터 얻을 수 있기 때문에 왼쪽과 오른쪽을 분리해서 생각하긴..

[C#] 매개변수로써의 구조체와 클래스의 차이 [내부링크]

매개변수로의 구조체와 클래스 사용 얕은 복사와 깊은 복사에 대해 알기 전에 구조체와 클래스에 대해 이야기해보려고 한다. // 클래스 Test_c class Test_c { public int a; public int b; } // 구조체 Test_s struct Test_s { public int a; public int b; }; 둘 다 int형 변수 a, b를 담고 있는 변수형이다. 기능으로는 큰 차이가 없어 보인다. 그럼 이렇게 변수를 한 곳에 모아두는 것으로만 사용할 때는 사실 큰 차이가 없는 것일까? 다른 계산 결과가 나오는 예시 코드 그렇지 않다. 아래의 예시를 보자. using System; namespace CSharp_Test { class Test_c { public int a; } s..

[C++] 백준 1865 - 웜홀 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1865 1865번: 웜홀 첫 번째 줄에는 테스트케이스의 개수 TC(1 ≤ TC ≤ 5)가 주어진다. 그리고 두 번째 줄부터 TC개의 테스트케이스가 차례로 주어지는데 각 테스트케이스의 첫 번째 줄에는 지점의 수 N(1 ≤ N ≤ 500), www.acmicpc.net N개의 지점과 그 지점 사이에는 M개의 도로와 W개의 웜홀이 존재한다. 여기서 도로는 양방향이고 웜홀은 단방향이다. 도로와 웜홀의 정보는 공통적으로 (시작 지점, 도착 지점, 가는 시간)으로 들어온다. 웜홀은 시작했을 때보다 도착했을 때 시간이 거꾸로 가게 된다. 한 지점에서 출발하여 다시 출발했던 지점을 돌아올 때, 출발했을 때보다 시간이 돌아가있는 것이 가능한가?를..

[C++] 백준 1937 - 욕심쟁이 판다 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1937 1937번: 욕심쟁이 판다 n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에 www.acmicpc.net NxN 크기의 맵에 대나무가 각 칸에 존재한다. 대나무는 정수값이다. 판다가 이걸 먹는데, 먹고 난 이후에는 상하좌우로 움직인다. 판다는 움직일 때, 먹은 그 칸의 대나무보다 많은 칸으로밖에 이동하지 못한다. 맨 처음 판다를 놓을 수 있는 칸을 정할 수 있을 때, 판다가 최대한 많이 움직일 수 있는 칸의 수를 구하는 문제 문제 접근 단계 일단 맵의 크기는 최대 500x5..

[C++] 백준 20924 - 트리의 기둥과 가지 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/20924 20924번: 트리의 기둥과 가지 첫 번째 줄에는 노드의 개수 $N$($1 \le N \le 200\,000$)과 루트 노드의 번호 $R$($1 \le R \le N$)이 주어진다. 이후 $N-1$개의 줄에 세 개의 정수 $a$, $b$, $d$($1 \le a, b \le N$, $ a \ne b$)가 주어진다. 이는 $a$번 www.acmicpc.net 노드의 개수 N과 루트 번호 R이 들어온다. 그리고 N-1개의 노드 정보가 주어지는데, (a, b, c) -> a번 노드와 b번 노드가 연결되어 있는데 길이는 c이다. 그리고 기가 노드라는 것이 존재하는데, 이는 루트노드에서 시작했을 때 최초로 자식 노드가 2개 이상인..

[운영체제] 다중 쓰레드 모델(Multi-Thread Model) 종류 [내부링크]

다중 스레드 모델(MultiThreading Model) 수준 차이에 따른 스레드 지원 사용자 스레드(user threads) : 사용자 수준에서 지원하는 스레드 커널 위에서 지원되고 커널의 지원 없이 관리 커널 스레드(ker-nel threads) : 커널 수준에서 제공되는 스레드 커널 스레드는 운영체제에 의해 직접 지원되고 관리 거의 모든 현대 운영체제들은 커널 스레드를 지원 궁극적으로 사용자 스레드와 커널 스레드에는 어떤 연관 관계가 존재해야 함. 다대일 모델(Many-to-One Model) 많은 사용자 수준 스레드가 하나의 커널 스레드를 사상함 장점 스레드 관리는 사용자 공간의 스레드 라이브러리에 의해 행해짐 → 효율적 단점 한 스레드가 봉쇄형 시스템 콜할 경우, 전체 프로세스가 봉쇄 한 번에 ..

[C++] 백준 21940 - 가운데에서 만나기 (다익스트라 알고리즘 풀이) [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/21940 21940번: 가운데에서 만나기 위 조건을 만족하는 도시 $X$의 번호를 출력한다. 만약 가능한 도시 $X$가 여러 개인 경우는 도시의 번호를 오름차순으로 출력한다. www.acmicpc.net 정점과 간선 정보가 주어진다. 각 간선은 단방향으로 주어지고, 간선에는 시간이라는 가중치가 존재한다. 여기서 선택해야 하는 것은 왕복 시간(목적지로 갔다가 다시 돌아오는데 드는 시간)이 가장 많이 드는 사람의 시간을 최소화하는 도시를 선택하는 것이다. 도시의 개수 N과 간선의 개수 M, 그리고 사람 수 K와 각 사람이 사는 도시 정보가 주어진다. 왕복 시간이 가장 많이 드는 사람의 시간을 최소화하는 도시를 출력하고, 만약 여러 개..

[C++] 백준 13019 - A를 B로 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/13019 13019번: A를 B로 첫째 줄에 A, 둘째 줄에 B가 주어진다. 두 문자열의 길이는 같으며, 길이는 50을 넘지 않는다. 또, 알파벳 대문자로만 이루어져 있다. www.acmicpc.net 대문자 알파벳으로 이루어진 문자열 A와 B가 입력으로 들어온다. 문자열 A를 B로 바꾸는 것이 목표. 할 수 있는 연산은 알파벳 하나를 골라 가장 앞으로 보내는 것이다. 이때 최소 몇 번 만에 만들 수 있는지 구하는 문제 문제 접근 단계 일단 입력으로 들어오는 문자열의 길이가 50이 넘지 않는다. 따라서 시간초과는 크게 신경 쓰지 않아도 될 것 같다. 연산에서 중간에 있는 문자를 골라도 상관이 없다. 하지만 무조건 가장 앞으로 보내..

[C++] 백준 22945 - 팀 빌딩 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/22945 22945번: 팀 빌딩 능력치가 다 다른 개발자 $N$명이 팀 빌딩을 위해 한 줄로 서있다. 하나의 팀을 만들기 위해서는 개발자 2명이 반드시 모여야 한다. 개발자 A와 개발자 B가 팀을 만들 때 팀의 능력치는 아래와 같 www.acmicpc.net 능력치가 다 다른 N명이 입력으로 들어온다. 이 중에서 2명을 뽑아서 값을 만들 때, 값을 구하는 공식은 아래와 같다. (A와 B 사이에 존재하는 다른 사람 수)*min(A, B) 이러한 조건일 때 나올 수 있는 값의 최대치를 구하는 문제 문제 접근 단계 문제풀이를 위해 조건부터 살펴보자. 들어올 수 있는 사람 N은 최대 100,000까지 가능하고, 능력치는 10,000까지 ..

[Unity 3D/VR] XR Interaction Toolkit 커스텀 컨트롤러 모델링 [내부링크]

XR Origin → LeftHand Controller 하위 오브젝트로 큐브, 구 등 원하는 대로 배치하여 커스텀 게임 실행 시 자동으로 모델링 되도록 하기 프리팹화 만들어둔 모델을 프로젝트 창으로 드래그하여 프리팹화함 기존에 Hierarchy에 있던 Model들은 삭제 LeftHand Controller와 rightHand Controller에 있던 Model Prefab에 프리팹을 넣음 연결된 프리팹을 자동으로 게임 오브젝트로 만들어서 배치해 줌 결과 1 게임 실행 시 자동으로 커스텀했던 모델이 XR Origin과 붙어서 나오는 것을 확인 가능 결과 2 VR 움직임이 잘 된다.

[C++] 백준 6068 - 시간 관리하기 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/6068 6068번: 시간 관리하기 성실한 농부 존은 시간을 효율적으로 관리해야 한다는 걸 깨달았다. 그는 N개의 해야할 일에 (1 N; vector v(N); // 일을 담을 벡터 int avail = 0; for(int i = 0; i < N; i++){ int v1, v2; cin >> v1 >> v2; v[i] = {v1,v2}; avail = max(avail,v2-v1); // 필요하는 최소 시간이 가장 많은 걸 시작 시간으로 둚 } sort(v.begin(),v.end(),compare); // 정렬 // 0 이상일때까진 반복 while(avail >= 0){ int cnt = avail; // cnt -> 현재 시간 ..

[운영체제] 스레드(Thread)의 기본 개념과 다중 코어 프로그래밍 [내부링크]

스레드(Thread) 개요 스레드(Thread) : CPU 이용의 기본 단위 구성 → 스레드 ID + 프로그램 카운터(PC) + 레지스터 집합 + 스택 같은 프로세스에 속한 다른 스레드와 운영체제 자원들을 공유 운영체제 자원들 → 코드, 데이터 섹션, 열린 파일이나 신호 같은 것 2가지의 스레드 단일 스레드 프로세스 : 전통적인 프로세스로, 하나의 제어 스레드를 가지고 있다. 한 번에 하나의 작업만 수행할 수 있음 다중 스레드 프로세스 : 하나의 프로세스가 다수의 제어 스레드를 가지고 있음 동시에 하나 이상의 작업을 수행할 수 있다. 동기(Motivation) 현대의 거의 모든 소프트웨어 응용들은 다중 스레드를 이용한다. 하나의 응용은 몇 개의 실행 흐름을 가진 독립적인 프로세스로 구현된다. 예 워드에서..

[C++] 백준 10282 - 해킹 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/10282 10282번: 해킹 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 www.acmicpc.net A가 B에 의존하면, B가 감염됐을 때 A도 감염된다. 이를 의존이라고 한다. 입력으로 테스트 케이스, 컴퓨터 개수 n, 의존성 관계 개수 d, 해킹당한 컴퓨터의 번호 c가 주어진다. 의존성 관계 정보는 (a, b, s)로 주어지는데, 이는 컴퓨터 a가 컴퓨터 b를 의존하고, b가 감염된 후 s초 후 컴퓨터 a도 감염된다는 뜻이다. 해당 조건일 때 출력으로 컴퓨터 수, 마지막 컴퓨터가..

[C++] 백준 1477 - 휴게소 세우기 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/1477 1477번: 휴게소 세우기 첫째 줄에 현재 휴게소의 개수 N, 더 지으려고 하는 휴게소의 개수 M, 고속도로의 길이 L이 주어진다. 둘째 줄에 현재 휴게소의 위치가 공백을 사이에 두고 주어진다. www.acmicpc.net 입력으로 가지고 있는 휴게소 N과 만들어야 할 휴게소 M, 그리고 고속도로 길이 L이 주어진다. 휴게소를 M개를 더 지어 휴게소 사이의 거리를 최소화하려고 한다. 고속도로 끝과 중복된 곳에 배치하는 것은 금지한다. 휴게소들 사이의 거리가 최소가 되도록 이상적으로 배치했을 때, 그중 구간의 길이가 가장 긴 것을 출력하는 문제. 문제 접근 단계 문제가 말을 어렵게 써놔서 이해하는 게 한참 걸렸다. 이 문제의..

[Unity 3D/VR] XR Interaction Toolkit으로 HMD 생성 및 시뮬레이터로 사용 [내부링크]

HMD 새로운 Scene 생성 File → New Scene → Standard(URP) 선택 저장 장소는 Scenes 폴더 안에 적당한 이름으로 저장 XR Origin 게임 오브젝트 생성 Hierarchy 창에서 우클릭 → XR → XR Origin(VR)을 클릭 XR Origin(VR) 게임 오브젝트는 뭘까? HMD나 컨트롤러 등 연동된 장비의 기준이 되는 오브젝트 VR/AR 세상의 중심이나, 헤드셋 기준 높이 등을 설정할 때 사용 일반적으로 HMD와 연동된 메인 카메라 게임 오브젝트와 양손 컨트롤러와 연동된 게임 오브젝트 등을 자식으로 배치 자동적으로 메인 카메라가 XR Origin 게임 오브젝트의 자식 오브젝트로 들어감 XR Interaction Mananger라는 게임 오브젝트도 함께 생성 Ma..

[Unity 3D/VR] XR Interaction Toolkit 소개 및 프로젝트 세팅 [내부링크]

해당 학습은 VR기기가 없어도 시뮬레이터를 통해 게임 제작 및 테스트가 가능합니다. 때문에 VR 기기가 없어도 학습이 가능함을 알려드립니다. 개요 XR Interaction ToolKit이란? Unity에서 제작한 Unity XR 기반의 플러그인 유니티의 공식 플러그인 → 지원 및 업데이트가 보장될 것이라는 장점 모든 VR 플러그인 중 수명이 가장 김 VR의 일반적인 기능을 스크립트 없이 편하게 구현할 수 있음 Teleportation이나 Interaction 등 스크립트 작성량이 가장 적음 유니티에서 지원하는 다양한 VR장비들을 모바일과 PC에 손쉽게 연동 가능 PC/Mobile VR 장비에 모두 대응 가능 AR Foundation을 연동하면 AR 콘텐츠 제작해도 활용 가능 XR Interaction ..

[C++] 백준 14267 - 회사 문화 1 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/14267 14267번: 회사 문화 1 영선회사에는 매우 좋은 문화가 있는데, 바로 상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 즉, 상사가 한 직속 부하를 칭찬하면 그 부하 www.acmicpc.net 입력으로 직원수 n과 칭찬의 횟수 m이 주어진다. 그리고 직원은 1번부터 n번까지 번호가 매겨져 있다. 해당 문제에서 칭찬은 상사가 직속 부하를 칭찬하면 그 부하가 부하를, 또 그 부하를 연쇄적으로 칭찬하는 내리 칭찬 형식이다. 칭찬에는 각각의 수치가 존재한다. 두 번째 입력으로는 n개의 직속 상사와 부하관계가 주어진다. 직속 상사의 번호는 항상 자신의 번호보다 작다. 그리고 3..

[C++] 백준 14226 - 이모티콘 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/14226 14226번: 이모티콘 영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만 www.acmicpc.net 입력으로 S가 주어지고, S개의 이모티콘을 만드는 게 목표이다. 다음의 3가지 연산만을 사용하여 S개의 이모티콘을 만들어야 한다. 기본적으로 이모티콘 1개는 입력되어 있다. 모든 연산은 1초씩 걸리고, 클립보드에 복사하면 이전에 있던 내용은 없어지고 덮어쓰기 된다. 해당 조건일 때 이모티콘 S개를 만들기 위해 필요한 시간의 최솟값을 구하는 문제 문제 접근 단계 입력으로 주어지는 S는..

[운영체제] 파이프(Pipe)와 클라이언트 서버 환경에서의 통신 [내부링크]

파이프 파이프는 두 프로세스가 통신할 수 있게 하는 전달자로서 동작 초기 UNIX 시스템에서 제공하는 IPC 기법의 하나 파이프는 프로세스 간에 통신하는 간단한 방법이지만, 통신할 때 여러 제약이 발생 파이프 구현을 위해 고려해야 할 점 파이프가 단방향 또는 양방향 통신을 허용하는가? 양방향 통신이 허용된다면 → 반이중 방식인가, 전이중 방식인가? 반이중 방식 : 한 순간에 한 방향 전송만 가능 전이중 방식 : 동시에 양방향 데이터 전송 가능 통신하는 두 프로세스 간에 부모-자식과 같은 특정 관계가 존재해야 하는가? 파이프는 네트워크를 통해 통신이 가능한가, 아니면 동일 기계 안에 있는 두 프로세스끼리만 가능? 일반 파이프 일반 파이프는 생산자-소비자 형태로, 두 프로세스 간의 통신을 허용 생산자는 쓰기..

[C++] 백준 7682 - 틱택토 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/7682 7682번: 틱택토 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 줄은 9개의 문자를 포함하며, 'X', 'O', '.' 중 하나이다. '.'은 빈칸을 의미하며, 9개의 문자는 게임판에서 제일 윗 줄 왼쪽부터의 순서이다. 입 www.acmicpc.net 3x3 게임판에 O와 X 두 가지를 가지고 게임을 한다. 무조건 X를 먼저 두는 것을 시작으로 X와 O를 번갈아가면서 둔다. 게임에서 이기는 조건은 X나 O가 가로, 세로, 대각선 방향으로 3칸을 잇는 데 성공하는 것이다. 이를 틱택토라고 부르겠다. 틱택토를 성공하는 순간 게임은 즉시 끝난다. 게임판이 가득 차도 게임은 끝난다. 입력으로는 게임판의 최종상태가 주어지는..

[C++] 백준 3151 - 합이 0 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/3151 3151번: 합이 0 Elly는 예상치 못하게 프로그래밍 대회를 준비하는 학생들을 가르칠 위기에 처했다. 대회는 정확히 3명으로 구성된 팀만 참가가 가능하다. 그러나 그녀가 가르칠 학생들에게는 큰 문제가 있었다. www.acmicpc.net N개의 입력이 일렬로 들어온다. 입력은 정수로 들어오는데, 숫자가 -10,000 ~ 10,000 사이로 들어온다. 숫자 3개를 골라서 합이 0이 되는 경우가 몇 가지가 나오는지 찾는 문제. 숫자가 같아도 위치가 다르면 다른 경우의 수로 취급한다. 문제 접근 단계 제한사항부터 살펴보면 N개의 입력은 최대 10,000개까지 들어올 수 있다. 숫자가 3개를 골라야 하기 때문에 10000 C3..

[Unity 3D] 메가 번들 기간 한정 할인 안내 ( ~ 4월 27일) [내부링크]

* 이 글은 어필리에이트 링크를 포함하고 있습니다. 링크를 클릭하셔서 추천하는 에셋을 구매하시면 어필리에이트에게 수익이 발생합니다. 링크를 클릭만 하는 것으로는 수익이 발생하지 않지만, 프로젝트의 개발과 우수한 에셋의 추천에 큰 도움이 됩니다. 안녕하세요! 여태까지 CS/ 알고리즘 관련 글만 써오다가 이렇게 정보 관련 글로 찾아뵙는 건 처음이네요. 다름이 아니라, 이번에 유니티에서 한국 시간 2023년4월 6일 오전 12시부터 4월 27일 오전 12시까지 메가번들을 할인 판매한다고 해서 알려드리러 왔습니다! 이번에 판매하는 메가 번들의 테마는 시간 여행(Time Travel) 입니다! 사실 테마는 우리에게 중요한 게 아니죠! 이게 어떤 패키지로 구성되어 있고, 얼마나 세일하는지가 중요하겠죠? 완성도 높은..

[C++] 백준 16987 - 계란으로 계란치기 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/16987 16987번: 계란으로 계란치기 원래 프로그래머의 기본 소양은 팔굽혀펴기를 단 한 개도 할 수 없는 것이라고 하지만 인범이는 3대 500을 넘기는 몇 안되는 프로그래머 중 한 명이다. 인범이는 BOJ에서 틀린 제출을 할 때마다 턱 www.acmicpc.net N개의 계란이 존재하고, 각 계란에는 (내구도, 무게) 정보가 쌍으로 주어진다. 그리고 두 계란이 부딪힐 때 서로의 무게만큼 내구도가 깎여나간다. 내구도가 0 이하가 되면 계란이 깨지는 것으로 간주한다. 그리고 계란을 깨는 과정은 아래와 같이 한다. 1. 가장 왼쪽의 계란을 든다. 2. 손에 들고 있는 계란으로 깨지지 않은 다른 계란 중에서 하나를 친다. 단, 손에 ..

[운영체제] 프로세스 간 통신 개념 및 기법 정리 [내부링크]

프로세스 간 통신 운영체제 내에서 실행되는 병행 프로세스들은 독립적이거나 협력적인 프로세스 일 수 있다. 독립적 : 실행 중인 다른 프로세스들과 데이터를 공유하지 않는 프로세스 협력적 : 실행 중인 다른 프로세스들과 영향을 주고받는 프로세스 프로세스 협력을 허용하는 환경을 제공하는 이유 정보 공유 여러 응용 프로그램이 동일한 정보(복사, 붙여 넣기 등)를 원할수도 있음 → 그러한 정보를 병행적으로 접근할 수 있는 환경을 제공해야 함 계산 가속화 특정 태스크를 빨리 실행하고자 함 → 태스크를 서브태스크로 나누어 이를 다른 서브태스크들과 병렬로 실행하면 됨 가속화는 복수 개의 처리 코어를 가진 경우에만 가능 모듈성 시스템 기능을 별도의 프로세스 또는 스레드로 나누어, 모듈식 형태로 시스템을 구성할 수도 있음..

[C++] 백준 21939 - 문제 추천 시스템 Version 1 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/21939 21939번: 문제 추천 시스템 Version 1 tony9402는 최근 깃헙에 코딩테스트 대비 문제를 직접 뽑아서 "문제 번호, 난이도"로 정리해놨다. 깃헙을 이용하여 공부하시는 분들을 위해 새로운 기능을 추가해보려고 한다. 만들려고 하는 명령 www.acmicpc.net 문제가 N개 주어지는데 (문제의 번호, 난이도)의 쌍으로 이루어진다. 이후 명령어 M개가 들어오는데 각 명령어는 아래와 같다. 해당 조건일 때 recommend x로 나오는 출력을 그대로 구현해라는 문제 문제 접근 단계 문제 제한 사항부터 살펴보자. 문제의 개수 N은 최대 100,000개까지, 명령어 M의 개수는 10,000개이다. 최대 100,000..

[C++] 백준 17070 - 파이프 옮기기 1 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/17070 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net NxN짜리 격자판이 존재한다. 그리고 중간에 벽(1)이 존재한다 그리고 2칸을 차지하는 파이프가 존재하는데, 무조건 (1,1)과 (1,2)에서 시작한다. 목표는 파이프가 벽에 부딪히지 않고, (N, N)까지 이동하는 것이다. 파이프는 회전이 가능한데, 움직이면서 회전이 가능하다. 회전은 한 번에 45도씩만 가능하다. 움직이는 방향은 →↓으로만 움직일 수 ..

[네트워크/Network] 네트워크 계층의 역할과 및 IP 구조 [내부링크]

네트워크 계층의 역할 네트워크 간의 연결 구조 네트워크 계층 역할 : 네트워크 간의 통신을 가능하게 하는 것 서로 다른 네트워크에 있는 컴퓨터로 데이터 전송이 가능해짐 데이터 링크 계층 → 같은 네트워크에 있는 컴퓨터로만 데이터 전송 가능 라우터 다른 네트워크로 데이터를 전송하기 위해 필요한 네트워크 장비 거리에 관계없이 데이터를 보낼 수 있음 해당 목적지까지 어떤 경로로 가는 것이 좋은지 알려주는 기능 데이터를 보내려는 곳의 주소(목적지)를 알아야 함 → IP주소를 알아야 함 IP 주소 : 어떤 네트워크의 어떤 컴퓨터인지를 구분할 수 있도록 하는 주소 IP주소가 있으면 다른 네트워크에 있는 목적지를 지정 가능 라우팅 테이블에 경로 정보를 등록하고 관리 라우팅 : 목적지 IP주소까지 어떤 경로로 데이터를..

[C++] 백준 17073 - 나무 위의 빗물 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/17073 17073번: 나무 위의 빗물 첫째 줄에 트리의 노드의 수 N과 1번 노드에 고인 물의 양을 의미하는 정수 W가 주어진다. (2 ≤ N ≤ 500,000, 1 ≤ W ≤ 109) 다음 N-1줄에 걸쳐, 트리에 존재하는 간선의 정보가 U V의 형태로 주어진다 www.acmicpc.net N개의 노드와 고인 물의 양 W가 주어진다. 루트 노드는 항상 1번으로 고정이다. 모든 노드는 루트 노드인 1번 노드의 자식 노드이다. 1번 노드로부터 물이 떨어지는데, 떨어지는 규칙은 다음과 같다. 1. 물을 가지고 있을 경우, 자식 노드가 있다면 자식 노드 중 하나를 골라 물을 1 준다. (자식 노드가 여러 개라면 동일한 확률로 하나를 ..

[네트워크/Network] 데이터 링크 계층 역할과 이더넷 [내부링크]

데이터 링크 계층의 역할과 이더넷 랜에서 데이터를 주고받으려면 데이터 링크 계층의 기술이 필요 이더넷 이더넷(Ethernet) : 데이터 링크 계층 규칙 중 일반적으로 가장 많이 사용되는 규칙 데이터 링크 계층 규칙 : 네트워크 장비 간에 신호를 주고받는 규칙 이더넷은 랜에서 적용되는 규칙을 뜻함 → 허브와 같은 장비에 연결된 컴퓨터와 데이터를 주고받을 때 사용 특정 컴퓨터에만 데이터를 보내기 위해, 보내려는 데이터에 목적지 정보를 추가 → 목적지 이외의 컴퓨터는 데이터를 받더라도 무시하게 됨 여러 컴퓨터가 동시에 데이터를 전송해도 충돌하지 않는 구조로 되어있음 → 데이터를 보내는 시점을 늦춤(CSMA/CD) CSMA/CD 반송파 감지 다중 접속 및 충돌 탐지의 약어 아래의 규칙들 덕분에 충돌이 일어나지..

[네트워크/Network] 물리 계층의 역할 & 랜 케이블과 허브 [내부링크]

물리 계층의 역할과 랜 카드의 구조 데이터와 전기신호 아날로그 신호 : 물결 모양의 전기 신호 전화 회선, 라디오 방송에 사용되는 신호 디지털 신호 : 막대 모양이랑 비슷 데이터가 전송되는 과정 송신 측에서 전송하는 비트열 데이터는 전기 신호로 변환되어 네트워크를 통해 수신 측에 도착 비트열 데이터 : 0과 1로 이루어져 있는 데이터 수신 측에서는 전기 신호를 비트열 데이터로 복원 전기 신호 변환은 물리 계층(1 계층)에서 일어나는 과정 물리 계층 컴퓨터와 네트워크 장비를 연결하고, 컴퓨터와 네트워크 장비 간에 전송되는 데이터를 전기 신호로 변환하는 계층 데이터가 전기신호로 변환되는 방법(랜카드) 랜 카드를 통해 네트워크에서 데이터를 주고받음 0과 1의 정보가 랜카드로 전송되고, 랜 카드는 0과 1을 전..

[운영체제] 프로세스 생성과 종료 개념 정리 [내부링크]

프로세스에 대한 연산 대부분 시스템 내의 프로세스들은 병행 실행될 수 있으며, 동적으로 생성되고, 제거되어야 한다. → 운영체제는 프로세스 생성 및 종료를 위한 기법을 제공해야 한다. 프로세스 생성 프로세스는 여러 개의 새로운 프로세스를 새로운 프로세스를 생성할 수 있다. 부모 프로세스 : 프로세스를 생성하는 프로세스 자식 프로세스 : 생성된 새로운 프로세스 자식 프로세스는 또다시 다른 프로세스를 생성할 수 있다. 부모와 자식 프로세스가 이어져 트리를 형성한다. 프로세스 식별자 프로세스 식별자(pid) : 프로세스를 구분하는 데 사용하는 식별자 해당 식별자는 보통 정수 UNIX, Linux 및 Windows와 같은 대부분의 현대 운영체제들이 사용 pid는 시스템의 각 프로세스에 고유한 값을 가지도록 할당..

[C++] 백준 19539 - 사과나무 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/19539 19539번: 사과나무 첫 번째 줄에 모든 나무가 갊자가 바라는 높이가 되도록 물뿌리개를 통해 만들 수 있으면 “YES”를, 아니면 “NO”를 따옴표를 제외하고 출력한다. www.acmicpc.net 일렬로 1부터 N번까지 나무가 존재하는데, 나무의 초기 높이는 모두 0이다. 그리고 나무를 1 성장시킬 수 있는 물뿌리개와, 나무를 2 성장시킬 수 있는 물뿌리개 2개가 존재한다. 두 물뿌리개는 무조건 동시에 뿌려야 하고, 한 나무에 몰아서 줘서 3을 성장시킬 수 있다. N개의 정수가 주어졌을 때, 해당 물뿌리개들로 해당 높이 배치를 만들 수 있는지 판단하는 문제 문제 접근 단계 문제의 조건부터 살펴보면, 나무의 개수는 최대..

[운영체제] 프로세스 스케줄링 개념 정리 [내부링크]

프로세스 스케줄링 다중 프로그래밍 목적 CPU 이용을 최대화하기 위해 항상 어떤 프로세스를 실행하는 것 시분할의 목적 프로세스들 사이에서 CPU 코어를 계속 교체하는 것 ← 각 프로그램이 실행되는 동안 사용자가 상호작용 할 수 있도록 하기 위해 시분할과 다중 프로그래밍의 목적을 달성하기 위해 프로세스 스케줄러가 존재 프로세스 스케줄러 : 코어에서 실행 가능한 프로세스 중 하나를 선택 각 CPU 코어는 한 번에 하나의 프로세스만 실행 가능 → 코어보다 많은 프로세스가 있는 경우, 초과 프로세스는 코어가 사용 가능해지고, 다시 스케줄 될 때까지 대기 현재 메모리에 있는 프로세스 수를 다중 프로그래밍 정도라고 함 프로세스는 대부분 2가지로 나눌 수 있음 I/O 바운드 프로세스 : 계산에 소비하는 것보다 I/O..

[운영체제] 프로세스의 개념과 구조 ( with PCB ) [내부링크]

프로세스 개념 프로세스(process) = 작업(job) : 모든 CPU 활동들 비공식적으로, 프로세스란 실행 중인 프로그램 프로세스의 현재 활동 상태는 프로그램 카운터 값 + 프로세서 레지스터의 내용 프로세스의 구조 텍스트 섹션 : 실행 코드 프로그램 실행 시간 동안 크기 고정 데이터 섹션 : 전역 변수 프로그램 실행 시간 동안 크기 고정 힙 섹션 : 프로그램 실행 중 동적으로 할당되는 메모리 프로그램 실행 중 동적으로 변함 메모리가 동적으로 할당됨에 따라 힙이 커짐 반대로 메모리가 시스템에 반환되면 축소됨 스택 섹션 : 함수 호출 시 임시 데이터 저장소(함수 매개변수, 복귀 주소, 지역변수) 프로그램 실행 중 동적으로 변함 함수 호출 → 매개변수, 지역변수, 복귀 주소를 포함하는 활성화 레코드가 스택..

[운영체제] 운영체제의 빌딩과 부팅, 그리고 디버깅 [내부링크]

운영체제 빌딩과 부팅 일반적인 운영체제 → 다양한 주변장치 구성을 가진 모든 종류의 컴퓨터에서 실행되도록 설계 운영체제 생성 운영체제 생성 절차 운영체제 소스 코드 작성 운영체제가 실행될 시스템의 운영체제 구성 운영체제 컴파일 운영체제 설치 컴퓨터와 새 운영체제 부팅 시스템 빌드 시스템 관리자가 운영체제 소스 코드의 사본을 수정한 뒤, 운영체제가 완전히 컴파일된다. 컴파일 시, 각 데이터는 구성 파일에 설명된 시스템에 맞는 운영체제의 출력-오브젝트 버전을 생성 상세한 조정을 할 수 없는 수준에서 시스템 설명을 통해 기존 라이브러리에서 사전 컴파일된 오브젝트 모듈을 선택 가능 모듈들이 서로 링크되어 새로운 운영체제 생성 → 지원되는 I/O 장치 드라이버를 포함한 라이브러리에서 필요한 것만 선택 가능 장점 ..

[C++] 백준 11657 타임머신 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/11657 11657번: 타임머신 첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)가 주어진다. www.acmicpc.net N개의 도시와 M개의 버스 노선이 주어진다. M개의 버스 정보로는 A, B, C가 들어오는데, (출발지, 도착지, 걸리는 시간)이다. 걸리는 시간에는 음수도 존재한다. 1번 도시에서 출발해서 각 도시별로 가장 빠른 시간을 출력한다. 이때, 무한대로 음수로 가는 시간이 나올 경우 -1을 출력한다. 또한 그 도시로 갈 수 없..

[네트워크/Network] OSI 와 TCP/IP의 계층 구조 및 데이터 통신 과정 [내부링크]

네트워크의 규칙 프로토콜이란? 통신을 하기 위한 규칙(네트워크의 규칙) 규칙들은 상호 간의 영향을 주지 않는다.(독립적) OSI 모델 OSI 모델이란? 과거에는 케이블을 연결하는 커넥터나 컴퓨터가 회사끼리 다르면 통신을 할 수 없었음 → 다른 회사끼리 통신하고자 공통으로 사용할 수 있는 표준 규격을 정함 ISO : 표준 규격을 정하는 국제표준화기구 단체 → OSI모델이라는 표준 규격을 제정 OSI 모델 : 네트워크 기술의 기본이 되는 모델 7개의 계층(레이어)으로 나눔 통신할 때 데이터는 맨 위의 계층에서 아래 계층으로 순차적으로 전달 각 계층 설명 7 계층 - 응용 계층 애플리케이션 계층 이메일, 파일 전송, 웹사이트 조회 등 애플리케이션에 대한 정보 제공 6 계층 - 표현 계층 프레젠테이션 계층 문자..

[네트워크/Network] 기초 용어 설명 및 LAN / WAN 구성 [내부링크]

네트워크의 구조 컴퓨터 네트워크란? 컴퓨터가 2대 이상 연결되어 있으면 컴퓨터 네트워크 할 수 있는 일 데이터 전송, 웹 사이트 열람, 메일 송수신 인터넷 : 전 세계의 큰 네트워크부터 작은 네트워크까지 연결하는 거대한 네트워크 패킷이란? 송/수신 간에 네트워크를 통해 전송되는 데이터의 작은 조각 큰 데이터가 있더라도 작게 나누어 보내야 함 작게 나누어 보내야 하는 이유 큰 데이터는 대역폭을 많이 차지 → 정체 발생 대역폭(bandwidth) 네트워크에서 이용 가능한 최대 전송 속도 정보를 전송할 수 있는 단위 시간당 전송량 용량이 큰 사진 데이터는 패킷으로 나눠서 보내야 함 → 목적지에 도착하면 원래 사진으로 되돌리는 작업 필요 패킷이 전송될 때 순서대로 도착하지 않거나, 누락될 수도 있음 → 목적지에..

[운영체제] 설계와 구현 & 운영체제 구조의 종류 정리 [내부링크]

운영체제 설계 및 구현 설계 목표 시스템 설계의 첫 번째 문제점 → 시스템의 목표와 명세를 정하는 일 시스템 설계의 최상위 수준에서는 하드웨어와 시스템 유형의 선택에 영향을 받음 시스템 유형 : 일괄처리, 시분할, 단일 사용자, 다중 사용자, 분산, 실시간, 범용 등 최상위 설계 수준을 넘어서면 요구 조건을 일일이 명시하는 것이 훨씬 어려워짐 요구 조건은 근본적으로 사용자 목적과 시스템 목적 2가지 그룹으로 나뉨 사용자 목적 : 사용자들이 시스템에 기대하는 특징 시스템은 사용하기 쉽고, 편리하고, 믿을 수 있고, 안전하고, 신속해야 함 특징을 구현하는 방법에 대한 일반적인 합의 사항 X → 설계 명세에 쓸모없음 시스템 목적 : 시스템에 관련된 사람들에 의해 요구조건들이 정의되는 것 운영체제는 설계, 구현..

[운영체제] 링커(Linker)와 로더(Loader) 개념 정리 [내부링크]

링커(Linker)와 로더(Loader) 프로그램은 디스크에 이진 실행 파일(ex : a.out, prog.exe)로 존재해야 함 소스 파일은 임의의 물리 메모리 위치에 적재되도록 설계된 오브젝트 파일로 컴파일됨 이러한 형식의 파일을 재배치 가능 오브젝트 파일이라고 불림 프로그램을 CPU에서 실행하는 절차를 설명할 예정 CPU에서 실행하려면, 프로그램을 컴파일하고 메모리로 가져와 프로세스 형태로 배치해야 함 링커 : 재배치 가능 오브젝트 파일을 하나의 이진 실행 파일로 결합 링킹 단계에서 다른 오브젝트 파일 또는 라이브러리 포함될 수 있음 표준 C 라이브러리, 수학 라이브러리 등 로더 : 이진 실행 파일을 메모리에 적재 프로그램 부분에 최종 주소를 할당, 프로그램 코드와 데이터를 해당 주소와 일치하도록 ..

[운영체제] 시스템 서비스와 프로그램이 OS마다 다른 이유 [내부링크]

시스템 서비스 시스템 유틸리티라고도 불리고 프로그램 개발과 실행을 위해 더 편리한 환경을 제공 일부 : 단순한 시스템 콜에 대한 사용자 인터페이스 대부분 : 훨씬 더 복잡함 시스템 서비스는 다음의 범주로 분류 가능 파일 관리 이 프로그램은 파일과 디렉터리 제어와 관련된 조작을 한다. 파일 디렉터리 생성, 삭제, 복사, 이름 바꿈, 인쇄, 열거, 조작 등 상태 정보 통상 이 프로그램들은 정보를 출력 장치 혹은 파일로 포맷하여 인쇄, 혹은 GUI의 윈도에 표시 단순히 는 날짜, 시간, 가용 메모리, 디스크 공간의 양, 사용자 수 등의 상태 정보 제공 복잡하게는 상세한 성능, 로깅 및 디버깅 정보를 제공 몇몇 시스템은 환경 설정 정보를 저장하고 검색할 수 있는 등록 기능 제공 파일 변경 디스크나 다른 저장 장..

[운영체제] 시스템 콜(2) - 시스템 콜의 유형 정리 [내부링크]

다섯 가지 중요한 범주로 묶을 수 있음 → 프로세스 제어, 파일 조작, 장치조작, 정보 유지 보수, 통신과 보호 1. 프로세스 제어 실행 중인 프로그램은 수행을 정상적 또는 비정상적으로 멈출 수 있어야 한다. 시스템 종류에 따른 제어 차이 정상 또는 비정상적인 상황에서, 운영체제는 명령 인터프리터로 제어를 전달한 상태 ← 사실 운영체제는 명령 인터프리터로 제어를 전달해야 함 대화식 시스템 단순히 다음 명령을 계속 수행 사용자가 오류에 대응하여 적절한 명령을 내릴 것이라고 가정함(사용자에게 맡김) GUI 시스템 비정상적인 상황이라면, 팝업창이 사용자에게 오류를 알리고 지시를 기다림 기타 시스템 오류가 발생한 경우, 제어 카드를 사용하여 특별한 복구 조치를 지시 오류 발견 뒤 비정상적으로 종료하기를 원한다면..

[운영체제] 시스템 콜(1) - 시스템 콜의 개념과 API, 운영체제와의 관계 [내부링크]

시스템콜이란? 시스템 콜이 사용되는 방법의 예 운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스 제공 간단한 프로그램이라도 운영체제의 기능을 아주 많이 사용 초당 수천 개의 시스템 콜을 수행 사용자 대부분은 이러한 상태를 알지 못함 → 응용 개발자들은 API에 따라 프로그램 설계 모든 운영체제는 고유한 시스템 콜 이름을 가짐 응용 프로그래밍 인터페이스(API) 응용 프로그래머가 사용 가능한 함수의 집합을 명시 각 함수에 전달되어야 할 매개변수와 반환값 포함 프로그래머는 운영체제가 제공하는 코드의 라이브러리를 통해 API를 활용 막후에서 API를 구성하는 함수들은 통상 응용 프로그래머를 대신하여 실제 시스템 콜을 호출 예 : Windows 함수 CreateProcess() → NTCreatePro..

[C++] 프로그래머스 Level 3 - 인사고과 [내부링크]

문제 이해 단계 문제 설명 완호네 회사는 연말마다 1년 간의 인사고과에 따라 인센티브를 지급합니다. 각 사원마다 근무 태도 점수와 동료 평가 점수가 기록되어 있는데 만약 어떤 사원이 다른 임의의 사원보다 두 점수가 모두 낮은 경우가 한 번이라도 있다면 그 사원은 인센티브를 받지 못합니다. 그렇지 않은 사원들에 대해서는 두 점수의 합이 높은 순으로 석차를 내어 석차에 따라 인센티브가 차등 지급됩니다. 이때, 두 점수의 합이 동일한 사원들은 동석차이며, 동석차의 수만큼 다음 석차는 건너뜁니다. 예를 들어 점수의 합이 가장 큰 사원이 2명이라면 1등이 2명이고 2등 없이 다음 석차는 3 등부터입니다. 각 사원의 근무 태도 점수와 동료 평가 점수 목록 scores이 주어졌을 때, 완호의 석차를 return 하도..

[C++] 백준 16938 - 캠프 준비 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/16938 16938번: 캠프 준비 난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다. www.acmicpc.net N개의 문제가 나열되어 있고, 각 문제는 정수로 난이도가 표현되어 있다. 이 중에서 2문제 이상을 골라야 한다. 고른 문제 난이도의 합이 L 이상, R 이하가 되어야 하고 최댓값과 최솟값의 차이가 X 이상이어야 한다. 해당 조건을 만족하는 문제의 경우의 수는 총 몇 개인지를 고르는 문제 문제 접근 단계 문제의 조건부터 살펴보자. 문제의 개수 N이 최대 15개밖에 안된다. 이 말은 탐색할게 몇 개 없어서 완전 탐색을 해도 된다는 소리다. 그리고 L과 R은 최대 \(10^9\) 이라 int 자료형..

[C++] 백준 11509 - 풍선 맞추기 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/11509 11509번: 풍선 맞추기 첫 번째 예제 에서 [5,4,3] 을 터트리고 [2,1]을 터트리면 모든 풍선을 터트릴 수 있으므로 최소한 2개의 화살을 필요로 한다. www.acmicpc.net 왼쪽부터 오른쪽으로 일렬로 서있는 N개의 풍선이 있다. 그리고 화살은 H의 높이에서 오른쪽으로 출발하고 풍선에 부딪힐 때마다 풍선은 터지며, 화살은 높이가 H-1이 된다. 풍선과 화살은 높이가 같아야 부딪히는 것으로 간주한다. 해당 조건에서 N개의 풍선을 모두 터트릴 때 가장 적은 화살을 사용해라. 그리고 그 화살의 개수를 출력해라 문제 접근 단계 문제의 조건부터 살펴보면, 풍선의 개수 N와 높이 H는 최대 1,000,000개이다. ..

[C++] 백준 3079 - 고냥이 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/16472 16472번: 고냥이 고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고 www.acmicpc.net 소문자로 이루어진 알파벳 문자열이 주어진다. 또한 입력으로 N이 주어지는데, 서로 다른 종류의 알파벳을 인식할 수 있는 개수이다. 구해야 하는 것은 N개의 서로 다른 종류의 알파벳을 인식할 수 있을 때, 주어진 문자열에서 인식할 수 있는 연속된 문자열 중 최대 길이를 구하는 문제 문제 접근 단계 늘 그렇듯, 제한사항부터 알아보자. 입력 N은 최대 26까지, 문자열의 길이는 최대 100,00..

[C++] 백준 3079 - 입국심사 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/3079 3079번: 입국심사 첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ M ≤ 1,000,000,000) 다음 N개 줄에는 각 심사대에서 심사를 하는데 걸리는 시간인 Tk가 주어진다. (1 ≤ Tk ≤ 109) www.acmicpc.net N개의 심사대와 M명이 주어진다. 각 심사대마다 심사하는데 소요되는 시간이 존재한다. M명은 한 줄로 서서 자기 차례를 기다리는데, 여러 개의 심사대 중 하나를 골라서 갈 수 있다. 이미 심사가 진행 중인 곳은 가지 못한다. 또한 몇 초를 기다렸다가 가는 것도 가능하다. 여러 가지 수를 조합해서 M명이 최대한 빨리 심사를 마치는 경우의 수를 조합할 때, 이때의 최소 ..

[C++] 백준 16928 - 뱀과 사다리 게임 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/16928 16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 10x10 짜리 맵에 사다리와 뱀과 맵이 있다. 그리고 플레이어는 1~6까지 적혀있는 주사위로 움직인다. 목표는 1에서 100까지 움직이는 것이다. 주사위 결과가 100칸을 넘어서 움직이는 것이라면 이동할 수 없다. 사다리와 뱀은 둘 다 점프 개념으로 사다리는 뒤에서 앞으로, 뱀은 앞에서 뒤로 이동하는 개념이다. N개의 사다리와 M개의..

[C++] 백준 20955 - 민서의 응급 수술 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/20955 20955번: 민서의 응급 수술 민서는 강원대학교 컴퓨터공학과의 신임 교수이다. 그녀가 저술한 효율적인 택배 배달을 위한 최적 경로 설계에 관한 연구 논문은 아직도 널리 인용되고 있다. 오늘도 열심히 강의를 하던 민서 www.acmicpc.net 뉴런(노드) N개와 시냅스(간선) M개가 들어온다. 이후 M 줄에 걸쳐 연결된 두 뉴런의 정보가 들어온다. 만들어야 하는 것은 하나로 연결된 트리, 즉 사이클이 존재하지 않아야 한다. 만약 사이클이 존재한다면 그 사이클을 끊어야 한다. 이러한 조건일 때 모든 뉴런을 하나의 연결된 트리로 만들 때 필요한 최소 연산 횟수를 구하는 문제 문제 접근 단계 문제에서 대놓고 뉴런과 시냅스,..

[C++] 백준 18866 - 젊은 날의 생이여 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/18866 18866번: 젊은 날의 생이여 욱제의 젊은 날이 될 수 있는 최대 기간, 즉 문제의 조건을 만족할 수 있는 최대의 1 ≤ K > N; for(int i = 0; i < N; i++){ int v1,v2; cin >> v1 >> v2; v[i][0]= v1; v[i][1]= v2; } int young[N][2], old[N][2]; // 젊은날, 늙은날 최대 최소 정보 int max_happy = 0; int min_happy = INT32_MAX; int max_tired = 0; int min_tired = INT32_MAX; // 젊은 날은 1부터 ~ K까지 for(int i = 0; i < N; i++){ // ..

[C++] 백준 16398 - 행성 연결 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/16398 16398번: 행성 연결 홍익 제국의 중심은 행성 T이다. 제국의 황제 윤석이는 행성 T에서 제국을 효과적으로 통치하기 위해서, N개의 행성 간에 플로우를 설치하려고 한다. 두 행성 간에 플로우를 설치하면 제국의 함 www.acmicpc.net 행성의 수 N개가 입력으로 들어온다. 이후 행성 간 관리 비용이 NxN 행렬로 들어오는데, 각각 \(C_{ij}\)로 i와 j 사이의 비용을 뜻한다. (i = j인 경우 0) 행성 N개를 모두 연결하는데 드는 비용을 최소화할 때, 최소화한 비용을 구하는 문제 문제 접근 단계 조건부터 보자면 행성의 수 N은 최대 1000개까지이다. 즉 NxN 행렬은 1,000,000개까지 생성될 수..

[C++] 백준 4485 - 녹색 옷 입은 애가 젤다지? [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/4485 4485번: 녹색 옷 입은 애가 젤다지? 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주 www.acmicpc.net NxN 2차원 맵이 주어진다. 각 칸에는 0 ~ 9까지에 정수가 적혀있다. 그리고 각 칸을 밟을 때마다 해당 점수를 얻는다. 점수를 최대한 적게 얻으면서 (0,0)에서 (N-1, N-1)까지 이동하는 것이 목표이다. 플레이어는 상하좌우로 움직일 수 있을 때, 최소 점수를 구하는 것이 문제이다. 문제 접근 단계 문제 조건부터 살펴보면 맵의 크기 N은 최대 125, ..

[운영체제] 운영체제가 하는 일과 제공하는 방식(서비스와 사용자 인터페이스) [내부링크]

이번 포스팅 목표 운영체제가 사용자에게 제공하는 서비스에 대해 알아가는 것 사용자에게 서비스를 제공하기 위한 방식(인터페이스)을 알아가는 것 1. 운영체제 서비스 운영체제는 프로그램과 그 사용자에게 특정 서비스를 제공 서비스로 인해 프로그래머가 작업을 더 쉽게 수행 가능 운영체제 서비스를 바라보는 관점 - 사용자에게 도움을 주는 목적 사용자 인터페이스(UI) : 거의 모든 운영체제가 제공 그래픽 사용자 인터페이스(GUI), 터치 스크린 인터페이스, CLI 등 프로그램 수행(program execution) :시스템은 프로그램을 메모리에 적재해 실행 가능해야 함 프로그램 무조건 실행을 끝낼 수 있어야 함(정상이든, 비정상이든) 입출력 연산(I/O) : 수행 중인 프로그램은 입출력을 요구할 수 있음 입출력에..

[C++] 백준 16168 - 퍼레이드 ( 직관적인 DFS 풀이 ) [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/16168 16168번: 퍼레이드 첫 번째 줄에 지점의 개수 V, 연결 구간의 개수 E가 주어진다. (1 ≤ V ≤ E ≤ 3000) 이후 E개의 줄에 걸쳐 각 연결 구간이 연결하는 두 지점의 번호 Va, Vb가 공백을 사이에 두고 주어진다. (1 ≤ Va, www.acmicpc.net 노드(지점)의 개수 V와 간선(연결 구간) E가 입력으로 들어온다. 이후, 다음 줄에 \(V_a \;\; V_b \)가 M개가 들어온다. 해당 입력이 들어올 때, 노드는 중복해서 지나갈 수 있고, 간선은 한 번밖에 지나가지 못한다. 모든 간선을 지날 수 있을지 없을지에 판단하고, 가능하면 "YES" 없으면 "NO"를 출력해라 문제 접근 단계 문제 자..

[C++] 백준 5639 - 이진 검색 트리 ( 2번째 다른 풀이 ) [내부링크]

문제 이해 단계 예전에 풀었던 문제다.. 근데 못 풀었다. 그때는 3일 걸려서 풀긴 했었는데, 이번에는 풀지도 못했다. 블로그까지 써가면서 풀자고 했는데 못 풀었다. 예전에 했던 풀이는 아래 링크를 걸어두겠다 문제에 대한 설명 같은 것은 아래 링크를 참고해 주길 바란다. https://howudong.tistory.com/17 [C++] 백준 5639 - 이진 검색 트리 문제 이해 단계 문제 이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다. 노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다. 노드의 오른쪽 서브트리에 있 howudong.tistory.com 문제 접근 단계 두 번째 풀이 방법은 첫 번째 방법보다는 좀 더 논리적인 방법이라고 할 수 있다. 첫 번째 방법..

[C++] 백준 18769 - 그리드 네트워크 ( 그림으로 쉽게 이해하기 ) [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/18769 18769번: 그리드 네트워크 재현이는 그리드 네트워크 컨설팅 회사를 운영하고 있다. 어떤 회사의 데이터 서버가 격자 형태의 그래프로 주어졌을 때, 최소의 비용을 들여서 전용 통신망을 설치하려고 한다. 이때, 전용 통 www.acmicpc.net 테스트케이스 T가 주어지고, 행과 열을 나타내는 R과 C가 주어진다. 또한 입력으로 C-1개가 R번 들어오고, C개가 R-1번 들어온다. 서버와 서버 사이에는 통신망이 존재하는데 각각 이동하는데 드는 비용이 존재한다. 설치 비용은 무조건 1,2,3,4 중 하나이다. 그리고 한 서버와 연결된 통신망(간선)의 비용은 중복되지 않는다. 이런 조건에서 모든 서버가 통신할 수 있도록 하는..

[C++] 백준 14728 - 벼락치기 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/14728 14728번: 벼락치기 ChAOS(Chung-ang Algorithm Organization and Study) 회장이 되어 일이 많아진 준석이는 시험기간에도 일 때문에 공부를 하지 못하다가 시험 전 날이 되어버리고 말았다. 다행히도 친절하신 교수님께서 아래와 www.acmicpc.net N개의 단원과 사용할 수 있는 총 시간 T가 입력으로 주어진다. 둘째 줄에는 각 단원에 대해서 공부하는데 걸리는 예상 시간과 배점이 입력으로 들어온다. 해당 조건에서 총 시간 T를 분배해서 각 단원을 공부하여 배점을 얻을 때 얻을 수 있는 최대 점수를 구하는 문제 문제 접근 단계 최대 점수를 구하는 문제라길래 처음에는 그리디 문제가 아닌..

[C++] 백준 14945 - 불장난 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/14945 14945번: 불장난 랩실의 크기가 3일 경우 (기웅, 민수)가 이동 가능한 방법은 (아래-아래, 대각-아래), (아래-아래, 대각-대각), (아래-대각, 대각-대각), (대각-아래, 아래-아래), (대각-대각, 아래-아래), (대각-대각, www.acmicpc.net 불이 있는 가장 위에서부터 시작해서 1초마다 아래, 오른쪽 아래, 왼쪽 아래로 퍼진다. 그리고 기웅, 민수도 위에서부터 시작하는데 이동 가능한 방법은 아래로 움직이거나 오른쪽 아래로 움직이는 2가지다. 기웅, 민수는 맨 위 칸을 제외하고는 이동 중에 겹쳐서는 안 된다. 입력으로 n이 주어지고 직각삼각형으로 위의 그림처럼 주어진다. 항상 가장 마지막 n칸에는..

[C++] 백준 13910 - 개업 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/13910 13910번: 개업 해빈이는 짜장면을 정말 좋아한다. 짜장면을 너무 좋아한 나머지 짜장면만 파는 중국집을 개업했다! 해빈이는 양손잡이여서 동시에 두 개의 웍(중국 냄비)을 사용하여 요리할 수 있다. 그러나 www.acmicpc.net 문제는 그렇게 복잡하지 않다. N개의 짜장면을 M개의 웍을 가지고 만들어야 한다. 각각의 웍은 짜장면을 만들 수 있는 용량을 가지고 있고, N개의 짜장면을 만들 때 정확하게 N개만 만들어야 한다.이때 한번 요리할 때 M개의 웍 중 1개 또는 2개씩 선택할 수 있을 때, 최소한의 횟수로 요리를 만들 때 그 횟수를 구하는 문제 문제 접근 단계 요리 횟수 통일하기 일단 문제의 조건부터 살펴보면 짜..

[C++] 백준 14925 - 목장 건설하기 ( BFS 풀이 ) [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/14925 14925번: 목장 건설하기 랜드 씨는 퇴직금으로 땅을 사서 목장을 지으려 한다. 그가 사려고 소개받은 땅은 직사각형이고 대부분 들판이지만, 여기저기에 베기 어려운 나무와 치울 수 없는 바위가 있다. 그는 목장을 하 www.acmicpc.net MxN 맵에 장애물이 있다. 장애물은 1과 2로 나타난다. 이때 정사각형을 최대한 크게 만들 때, 정사각형 변의 길이 L의 길이를 구하는 문제 문제 접근 단계 문제는 굉장히 직관적이다. 제한사항부터 바로 살펴보면 N과 M의 최대 길이가 5000인 상황. 5000 x 5000 = 25,000,000까지 가능하다. 브루트 포스는 힘들어 보인다. 만들어야 하는 것은 2차원 맵이 주어지기..

[C++] 백준 22871 - 징검다리 건너기 (large) [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/22871 22871번: 징검다리 건너기 (large) $N$개의 돌이 일렬로 나열 되어 있다. $N$개의 돌에는 수 $A_{1} A_{2} ... A_{i} ... A_{N}$로 부여되어 있다. 가장 왼쪽에 있는 돌에서 출발하여 가장 오른쪽에 있는 돌로 건너가려고 한다. 항상 오른쪽으 www.acmicpc.net N개의 돌이 일렬로 나열되어 있고 목표는 가장 왼쪽 돌에서 가장 오른쪽 돈으로 이동하는 것이다. 이동하는 데에는 아래 3가지 조건이 따른다 1. 무조건 왼쪽에서 오른쪽으로만 움직일 수 있다. 2. i번째 돌에서 j번째 돌로 이동할 때 드는 힘 K는 ( j - i ) * ( 1 + |\(A_i\) - |\(A_j\)| )이..

[C++] 프로그래머스 Level 3 - 연속 펄스 부분 수열의 합 [내부링크]

문제 이해 단계 문제 설명 어떤 수열의 연속 부분 수열에 같은 길이의 펄스 수열을 각 원소끼리 곱하여 연속 펄스 부분 수열을 만들려 합니다. 펄스 수열이란 [1, -1, 1, -1 …] 또는 [-1, 1, -1, 1 …]과 같이 1 또는 -1로 시작하면서 1과 -1이 번갈아 나오는 수열입니다. 예를 들어 수열 [2, 3, -6, 1, 3, -1, 2, 4]의 연속 부분 수열 [3, -6, 1]에 펄스 수열 [1, -1, 1]을 곱하면 연속 펄스 부분수열은 [3, 6, 1]이 됩니다. 또 다른 예시로 연속 부분 수열 [3, -1, 2, 4]에 펄스 수열 [-1, 1, -1, 1]을 곱하면 연속 펄스 부분수열은 [-3, -1, -2, 4]이 됩니다. 정수 수열 sequence가 매개변수로 주어질 때, 연속 ..

[C++] 백준 17135 - 캐슬 디펜스 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net NxM맵에 적이 배치되어 있다. 그리고 궁수는 무조건 NxM 맵 밖에 있는 N+1 위치에 3명만 존재한다. N+1 위치는 성의 위치이기도 하다. 하나의 칸에는 무조건 한 명이 궁수만 존재할 수 있다. 궁수는 사거리가 D 이하인 적들만 없앨 수 있다. 궁수 3명은 무조건 동시에 공격을 하며 같은 적을 공격할 수도 있다. 공격당한 적은 게임에서 제외된다. 적을 선정하는 기준은 궁수에게 거리가 가..

[C++] 백준 16235 - 나무 재테크 [내부링크]

문제 이해 단계 문제 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1 ×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 떨어진 칸의 개수, c는 가장 왼쪽으로부터 떨어진 칸의 개수이다. r과 c는 1부터 시작한다. 상도는 전자통신공학과 출신답게 땅의 양분을 조사하는 로봇 S2D2를 만들었다. S2D2는 1 ×1 크기의 칸에 들어있는 양분을 조사해 상도에게 전송하고, 모든 칸에 대해서 조사를 한다. 가장 처음에 양분은 모든 칸에 5만큼 들어있다. 매일매일 넓은 땅을 보면서 뿌듯한 하루를 보내고 있던 어느 날 이런 생각이 들었다. 나무 재테크를 하자! 나무 재테크란 작은 묘목을 구매해 어느 정도 키운..

[C++] 백준 16236 - 아기 상어 [내부링크]

문제 이해 단계 문제 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1 ×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가지고 있고, 이 크기는 자연수이다. 가장 처음에 아기 상어의 크기는 2이고, 아기 상어는 1초에 상하좌우로 인접한 한 칸씩 이동한다. 아기 상어는 자신의 크기보다 큰 물고기가 있는 칸은 지나갈 수 없고, 나머지 칸은 모두 지나갈 수 있다. 아기 상어는 자신의 크기보다 작은 물고기만 먹을 수 있다. 따라서, 크기가 같은 물고기는 먹을 수 없지만, 그 물고기가 있는 칸은 지나갈 수 있다. 아기 상어가 어디로 이동할지 결정하는 방법은 아래와 같다. 더 이상 먹을 수 있는 물고기가 공간에 없다면..

[C++] 백준 17140 - 이차원배열과 연산 [내부링크]

문제 이해 단계 크기가 3 ×3인 배열 A가 있다. 배열의 인덱스는 1부터 시작한다. 1초가 지날 때마다 배열에 연산이 적용된다. R 연산: 배열 A의 모든 행에 대해서 정렬을 수행한다. 행의 개수 ≥ 열의 개수인 경우에 적용된다. C 연산: 배열 A의 모든 열에 대해서 정렬을 수행한다. 행의 개수

[C++] 정렬(sort) 정렬 규칙을 직접 만드는 compare의 필요성과 사용법 [내부링크]

정렬(sort) - compare C++에서 자주 쓰이는 기능 중 헤더 안에 있는 sort 기능이 많이 쓰인다. 해당 함수는 벡터(vector)나 배열과 함께 사용한다. 아래는 사용법 예시이다. #include #include // sort 헤더파일 #include // 벡터 헤더파일 using namespace std; int array_size = 8; int main(){ int array[] = {4,5,2,1,5,1,74,5}; vector arr = {4,5,2,1,5,1,74,5}; sort(arr.begin(),arr.end()); sort(array,array+array_size,greater()); for(int i = 0; i < arr.size(); i++) { cout

[C++] 백준 15685 - 드래곤 커브 [내부링크]

문제 이해 단계 문제 드래곤 커브는 다음과 같은 세 가지 속성으로 이루어져 있으며, 이차원 좌표 평면 위에서 정의된다. 좌표 평면의 x축은 → 방향, y축은 ↓ 방향이다. 시작 점 시작 방향 세대 0세대 드래곤 커브는 아래 그림과 같은 길이가 1인 선분이다. 아래 그림은 (0, 0)에서 시작하고, 시작 방향은 오른쪽인 0세대 드래곤 커브이다. 1세대 드래곤 커브는 0세대 드래곤 커브를 끝 점을 기준으로 시계 방향으로 90도 회전시킨 다음 0세대 드래곤 커브의 끝 점에 붙인 것이다. 끝 점이란 시작 점에서 선분을 타고 이동했을 때, 가장 먼 거리에 있는 점을 의미한다. 2세대 드래곤 커브도 1세대를 만든 방법을 이용해서 만들 수 있다. (파란색 선분은 새로 추가된 선분을 나타낸다) 3세대 드래곤 커브도 2..

[C++] 백준 20056 - 마법사 상어와 파이어볼 [내부링크]

문제 이해 단계 어른 상어가 마법사가 되었고, 파이어볼을 배웠다. 마법사 상어가 크기가 N×N인 격자에 파이어볼 M개를 발사했다. 가장 처음에 파이어볼은 각자 위치에서 이동을 대기하고 있다. i번 파이어볼의 위치는 (ri, ci), 질량은 mi이고, 방향은 di, 속력은 si이다. 위치 (r, c)는 r행 c열을 의미한다. 격자의 행과 열은 1번부터 N번까지 번호가 매겨져 있고, 1번 행은 N번과 연결되어 있고, 1번 열은 N번 열과 연결되어 있다. 파이어볼의 방향은 어떤 칸과 인접한 8개의 칸의 방향을 의미하며, 정수로는 다음과 같다. 마법사 상어가 모든 파이어볼에게 이동을 명령하면 다음이 일들이 일어난다. 모든 파이어볼이 자신의 방향 di로 속력 si칸 만큼 이동한다. 이동하는 중에는 같은 칸에 여러..

[Git] Rebase 개념 및 SourceTree에서 사용(Mac OS) [내부링크]

Pull Request를 보냈을 때 충돌이 난다면? Solution1. 내 브랜치에 병합 커밋을 만들어서 해결 브랜치 B에서 커밋1과 커밋2를 병합해서 병합충돌 문제를 해결한 커밋3을 만듦 커밋3은 충돌문제를 해결했기 때문에 정상적으로 브랜치A에 Pull Request 가능 But, 해당 방식은 Pull Request 때문에 쓸데없는 커밋 로그가 남게됨 → Rebase 방식을 사용하면 이런 문제 해결 가능 Solution2. Rebase Rebase : 커밋의 베이스를 떼서 다른 곳으로 붙이는 것 깔끔한 Pull Request를 보낼 수 있음 내 브랜치에 내 변경사항만 남길 수 있다는 장점이 있음 실수하면 파일 전체가 꼬이는 문제가 발생할 수 있으므로 조심해서 사용해야함 브랜치 B에 있는 커밋 1과 커밋..

[C++] 백준 17144 - 미세먼지 안녕! [내부링크]

문제 이해 단계 문제 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1 ×1 크기의 칸으로 나눴다. 구사과는 뛰어난 코딩 실력을 이용해 각 칸 (r, c)에 있는 미세먼지의 양을 실시간으로 모니터링하는 시스템을 개발했다. (r, c)는 r행 c열을 의미한다. 공기청정기는 항상 1번 열에 설치되어 있고, 크기는 두 행을 차지한다. 공기청정기가 설치되어 있지 않은 칸에는 미세먼지가 있고, (r, c)에 있는 미세먼지의 양은 Ar, c이다. 1초 동안 아래 적힌 일이 순서대로 일어난다. 미세먼지가 확산된다. 확산은 미세먼지가 있는 모든 칸에서 동시에 일어난다. (r, c)에 있는 미세먼지는 인접한 네 방향..

[C++] 백준 21277 - 짠돌이 호석 [내부링크]

문제 이해 단계 DIY(Do It Yourself)는 호석이가 제일 좋아하는 콘텐츠이다. 이번 DIY는 동네 친구 하늘이랑 각자 직소 퍼즐을 하나씩 맞춰보기로 했다. 두 개의 퍼즐은 각자 N1 행 M1 열과 N2 행 M2 열의 격자 형태로 이루어져 있다. 각 격자는 정사각형 모양이며, 퍼즐 조각이 있을 수도 있고, 없을 수도 있다. 즉, 아래 그림도 올바른 퍼즐의 완성 형태이다. 성공적으로 DIY가 끝나서 퍼즐이 2개가 완성되었는데, 보관해야 하는 액자를 아직 구매하지 않았다. 그 이유는, 호석이는 엄청난 짠돌이기 때문에 퍼즐 하나마다 액자 하나를 사는 것은 상상도 못 하기 때문이다. 액자의 가격은 액자의 넓이(행의 개수 × 열의 개수)로 결정된다. 즉, 퍼즐 두 개를 퍼즐 조각끼리 같은 격자에서 만나지..

[C++] 백준 20327 - 배열 돌리기 6 [내부링크]

문제 이해 단계 https://www.acmicpc.net/problem/20327 20327번: 배열 돌리기 6 크기가 2N×2N인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 8가지가 있고, 연산에는 단계 ℓ (0 ≤ ℓ < N)이 있다. 단계 ℓ은 배열을 부분 배열로 나눌때 사용하는 값이며, 부분 www.acmicpc.net 이번 문제는 너무 길기 때문에 백준 링크로 대체한다. 요약하자면, 구현해야 하는 것이 총 8가지인데, 구현해야 할 기능은 총 4가지이다. 이 문제에서 특이한 점은 단계 L이란 것이 존재하는데, L은 부분배열을 의미한다. 부분 배열은 \(2^L * 2^L\) 크기여야 한다. 구현해야 하는 K는 1,2번 -> 같은 부분 배열에서 상하/좌우 배열 반전 3,4번 ->..

[C++] 백준 17406 - 배열돌리기 4 [내부링크]

문제 이해 단계 크기가 N×M 크기인 배열 A가 있을 때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의 값은 4이다. 1 2 3 2 1 1 4 5 6 배열은 회전 연산을 수행할 수 있다. 회전 연산은 세 정수 (r, c, s)로 이루어져 있고, 가장 왼쪽 윗 칸이 (r-s, c-s), 가장 오른쪽 아랫 칸이 (r+s, c+s)인 정사각형을 시계 방향으로 한 칸씩 돌린다는 의미이다. 배열의 칸 (r, c)는 r행 c열을 의미한다. 예를 들어, 배열 A의 크기가 6 ×6이고, 회전 연산이 (3, 4, 2)인 경우에는 아래 그림과 같이 회전하게 된다. A[1][1] A[1][2] ..

[C++] 백준 2877 - 4와 7 [내부링크]

문제 이해 단계 문제 창영이는 4와 7로 이루어진 수를 좋아한다. 창영이가 좋아하는 수 중에 K번째 작은 수를 구해 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 K(1 ≤ K ≤ 10^9)가 주어진다. 출력 첫째 줄에 창영이가 좋아하는 숫자 중 K번째 작은 수를 출력한다. 예제 입력 1 1 예제 출력 1 4 예제 입력 2 2 예제 출력 2 7 예제 입력 3 3 예제 출력 3 44 짧고 간결해서 아주 좋은 문제 4와 7로 구성된 숫자 중에서 입력된 K번째로 작은 수를 구하는 문제 문제 접근 단계 문제에서 건질만한 것은 K의 범위가 \(10^9\) 리서 int 범위를 넘어가지 않는다는 것 정도? 그다음부터는 찾아내야 할 것 같다. 이렇게 수를 다루는 문제 같은 경우, 1번째부터 K번째 작은 수까지 한번 ..

[C++] 백준 2469 - 사다리 타기 [내부링크]

문제 이해 단계 k명의 참가자들이 사다리 타기를 통하여 어떤 순서를 결정한다. 참가자들은 알파벳 대문자 첫 k개로 표현되며, 사다리 타기를 시작할 때의 순서는 아래 그림과 같이 항상 알파벳 순서대로이다. k=10 인 예를 들어 보자. 10명의 A, B, C, D, E, F, G, H, I, J 참가자들이 사다리 타기를 준비한다. 아래 그림은 10개의 세로줄과 5개의 가로 줄을 가지고 있는 사다리의 한 예를 보여주고 있다. 이 사다리에서 점선은 가로 막대가 없음을, 굵은 가로 실선은 옆으로 건너갈 수 있는 가로 막대가 있음을 나타내고 있다. 따라서 위에 제시된 사다리를 타면 그 최종 도달된 순서는 왼쪽으로부터 A, C, G, B, E, D, J, F, I, H 가 된다. 사다리 타기는 세로 막대를 타고 내..

[C++] 백준 14888 - 연산자 끼워넣기 (백트래킹 방식) [내부링크]

문제 이해 단계 N개의 수로 이루어진 수열 A1, A2,..., AN이 주어진다. 또, 수와 수 사이에 끼워 넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(×) 1개, 나눗셈(÷) 1개인 경우에는 총 60가지의 식을 만들 수 있다. 예를 들어, 아래와 같은 식을 만들 수 있다. 1+2+3-4×5÷6 1÷2+3+4-5×6 1+2÷3×4-5+6 1÷2×3-4+5+6 식의 계산은 ..

[C++] 백준 22943 - 수 [내부링크]

문제 이해 단계 0부터 9까지 K가지의 숫자를 한 번씩만 사용하여 만들 수 있는 수 중 아래 조건을 모두 만족하는 수들의 개수를 구해보자. 단, 수의 맨 앞에는 0이 올 수 없다. 즉, 0143는 불가능하다. 서로 다른 두 개의 소수의 합으로 나타낼 수 있는 경우 M으로 나누어 떨어지지 않을때까지 나눈 수가 두 개의 소수의 곱인 경우, 이 때, 두 개의 소수가 같아도 된다. 예를 들어, K가 1이고 M이 11인 경우로 생각해 보자. 한자리 수 중 1번 조건을 만족하는 수는 5, 7, 8, 9이고 2번 조건을 만족하는 수는 4, 6, 9가 있다. 이 두 개의 조건을 둘 다 만족하는 수는 9이므로 이 경우에는 1개이다. 입력 첫 번째 줄에 K와 M 주어진다. 출력 2가지 조건을 만족하는 수의 개수를 출력한다..

[C++] 백준 16927 - 배열 돌리기 2 [내부링크]

문제 이해 단계 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] ↓ ↓ ↑ ↑ A[3][1] A[3][2] → A[3][3] → A[3][4] A[3][5] ↓ ↑ A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5] 예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다. 1 2 3 4 2 3 4 8 3 4 8 6 5 6 7 8 1 7 7 6 2 7 8 2 9 8 7 6 → 5 6 8 2 → 1 7 6 3 5 4 3 2 9 ..

[C++] 백준 9081 - 단어 맞추기 (2가지 풀이) [내부링크]

문제 이해 단계 BEER라는 단어를 이루는 알파벳들로 만들 수 있는 단어들을 사전 순으로 정렬하게 되면 BEER BERE BREE EBER EBRE EEBR EERB ERBE EREB RBEE REBE REEB 와 같이 된다. 이러한 순서에서 BEER 다음에 오는 단어는 BERE가 된다. 이와 같이 단어를 주면 그 단어를 이루는 알파벳들로 만들 수 있는 단어들을 사전 순으로 정렬할 때에 주어진 단어 다음에 나오는 단어를 찾는 프로그램을 작성하시오. 입력 입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 하나의 단어가 한 줄로 주어진다. 단어는 알파벳 A~Z 대문자로만 이루어지며 항상 공백이 없는 연속된 알파벳으로 이루어진다. 단어의 길이는 100을 넘지 않..

[C++] 백준 16935 - 배열 돌리기 3 [내부링크]

문제 이해 단계 문제 크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 → 7 4 6 2 3 1 7 4 6 2 3 1 → 1 8 3 4 2 9 9 2 3 6 1 5 → 7 2 6 9 8 2 4 2 9 3 1 8 → 1 6 2 9 8 4 2번 연산은 배열을 좌우 반전시키는 연산이다. 1 6 2 9 8 4 → 4 8 9 2 6 1 7 2 6 9 8 2 → 2 8 9 6 2 7 1 8 3 4 2 9 → 9 2 4 3 8 1 7 4 6 2 3 1 → 1 3 2 6 4 7 9 2 3 6 1 5 → 5 1 6..

[C++] 백준 10703 - 유성 [내부링크]

문제 이해 단계 문제 작고 특이한 모양의 유성 사진이 인터넷에 올라왔다. 사진에는 매우 높은 곳에서 떨어지고 있는 유성이 허공에 찍혀 있었다. 유성이 떨어지고 난 뒤의 사진도 있었지만 안타깝게도 소실 돼버려 이를 복원해야 한다. 유성 사진을 문자의 배열로 단순화시켜 표기할 것이다. 문자 'X'는 유성의 일부를, 문자 '#'는 땅의 일부를, 그리고 나머지(공기)는 문자 '.'로 이루어져 있다. 모든 유성 조각들은 연결되어 있다. 즉, 두 부분 유성이 존재한다면, 한쪽에서 유성 조각을 통해 상하좌우로 이동해서 다른 부분 유성에 도달할 수 있다. 땅 또한 같은 방식으로 연결되어 있다. 주어진 사진에서 유성은 땅보다 위에 있다. 정확히 말하자면, 적어도 한 줄 이상의 공기('.')가 존재하며, 유성은 그 보다 ..

[C++] 백준 17128 - 소가 정보섬에 올라온 이유 [내부링크]

문제 이해 단계 소 N마리가 정보섬에 올라왔다! 소들은 정보섬 1층 앞마당에서 A1, A2, A3,..., AN, A1의 순서대로 동그랗게 앉아 쉬고 있다. 각 소들에게는 품질 점수 Ai가 적힌 스티커가 붙어 있다. 욱제는 소 떼 옆에서 효빈이가 계산해 둔 어떤 계산 식을 발견했는데, 그것은 아래와 같다. 풀어쓰자면, 원형으로 둘러앉은 소들에 대해서, 연속한 네 마리 소들의 품질 점수를 곱한 값을 모두 (정확히 한 번씩) 더한 것이다. 욱제는 효빈이가 학교를 떠나지 못하도록 심술부릴 작정이다. 욱제는 총 Q번에 걸쳐 어떤 i번째 소를 선택할 것이다. 그러고는 Ai가 적힌 스티커를 떼어내고, Ai*(-1)이 적힌 스티커를 붙일 작정이다. 그러면 효빈이는 Q번에 걸쳐서 S를 다시 계산해야 한다. 한 번 바꾼..

[C++] 백준 21925 - 짝수 팰린드롬 ( 스택 풀이 ) [내부링크]

문제 이해 단계 길이가 N인 수열 A이 있다. 이 수열을 여러 개의 짝수 팰린드롬으로 나누려고 한다. 짝수 팰린드롬은 수열의 길이가 짝수이고 수열을 뒤집어도 뒤집기 전 수열과 동일한 것을 의미한다. 예를 들어, 수열 [12,12]은 짝수 팰린드롬이고, 수열 [12,21]은 뒤집으면 [21,12]로 뒤집기 전 수열과 달라서 짝수 팰린드롬이 아니다. 수열을 나누었을 때 모든 부분 수열은 짝수 팰린드롬이어야 한다. 짝수 팰린드롬을 최대한 많이 있도록 나누려고 할 때 짝수 팰린드롬은 최대 몇 개가 있는지 구해보자. 입력 첫 번째 줄에 수열 A의 길이가 N이 주어진다. N은 항상 짝수이다. (1≤N≤5,000) 다음 줄에는 총 N개의 수열 A 원소 Ai가 주어진다. (1≤Ai≤10,000) 출력 짝수 팰린드롬은 ..

[C++] 백준 2447 - 별 찍기 - 10 [내부링크]

문제 이해 단계 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27,...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다. *** * * *** N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3) ×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다. 입력 첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 \(3^k\)이며, 이때 1 ≤ k < 8이다. 출력 첫째 줄부터 N번째 줄까지 별을 출력한다. 예제 입력 1 27 예제 출력 1 *****************..

[Unity 3D] 최적화 관점에서 보는 클래스와 구조체 차이(Class vs Struct) [내부링크]

클래스(Class)와 구조체(Struct)의 차이 Class 참조 형식으로 Heap 영역에 할당 제거될 때 가비지 컬렉터(Garbage Collector)에 의해 수거됨 상속 가능 Struct 값 타입이고 스택(Stack)에 할당됨 함수에서 나갈 때 CLI에 의해 수거됨 상속이 불가능함 프로파일러로 분석 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Assign_Test : MonoBehaviour { public bool triggerClass; public bool triggerStruct; // 클래스 class Test_class { int a; }; // 구조체 struct Te..

[C++] 백준 21608 - 상어 초등학교 (정렬 활용 풀이) [내부링크]

문제 이해 단계 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호가 매겨져 있고, (r, c)는 r행 c열을 의미한다. 교실의 가장 왼쪽 윗 칸은 (1, 1)이고, 가장 오른쪽 아랫 칸은 (N, N)이다. 선생님은 학생의 순서를 정했고, 각 학생이 좋아하는 학생 4명도 모두 조사했다. 이제 다음과 같은 규칙을 이용해 정해진 순서대로 학생의 자리를 정하려고 한다. 한 칸에는 학생 한 명의 자리만 있을 수 있고, |r1 - r2| + |c1 - c2| = 1을 만족하는 두 칸이 (r1, c1)과 (r2, c2)를 인접하다고 한다. 비어있는 칸 중에서 좋아하는 학..

[Unity 3D] 텍스트 최적화를 위한 2가지 사항 정리 [내부링크]

텍스트 아웃라인/쉐도우(Outline/Shadow) 텍스트에 아무런 효과를 안 줬을 때(Outline X, Shadow X) → vertex : 344 아웃라인/쉐도우 (Outline / Shadow) 아웃라인과 쉐도우는 vertex 낭비가 굉장히 심함 아웃라인 > 쉐도우 (아웃라인이 쉐도우보다 낭비가 더 심함) 아웃라인을 적용해 줬을 때 → vertex 2500개 쉐도우 적용해 줬을 때 → vertex 1000개 모바일 게임에서는 한 장면에 vertex의 개수가 10만 개가 넘어가면 유니티 엔진 자체에서 경고가 무수히 날아옴 굉장히 유의해서 사용해야 함 vertex 개수는 항상 신경 써줘야 함 BestFit 입력한 텍스트가 Rect Transfrom(설정해 둔 사각형)에 다 들어올 수 있도록 글자 사이..

[C++] 백준 22859 - HTML 파싱 [내부링크]

문제 이해 단계 웹 크롤링을 하여 HTML을 가공하는 프로그램을 만들려고 한다. HTML은 아래와 같이 구성되어 있다. (문제 일반화를 위해 실제 HTML 소스 코드 및 태그가 실제 존재하는 것과 다를 수 있다.) paragraph 1 paragraph 2 Italic Tag paragraph 3 Bold Tag end. paragraph 4 paragraph 5 Italic Tag 2 end. HTML에는 여는 태그 로 시작하여 닫는 태그 로 항상 끝나고, , 사이에 하나의 문단이 존재하고, , 사이에 하나의 문장이 존재한다. , 사이에는 main 태그, div 태그, p 태그를 제외한 다른 태그들이 존재할 수도 있다. 위 예시에서 title_name_1, title_name_2 부분은 div 태그 안..

[Unity 3D] 캔버스 최적화를 통한 퍼포먼스 향상(Text 예시) [내부링크]

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

[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"; /..

[Unity 3D] 프로파일러(Profiler)로 퍼포먼스 스파크(Performance spark) 현상 알아보기 [내부링크]

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

[C++] 백준 22856 - 트리 순회 [내부링크]

문제 이해 단계 노드가 N개인 이진트리가 있다. 트리를 중위 순회와 유사하게 순회하려고 한다. 이를 유사 중위 순회라고 하자. 순회의 시작은 트리의 루트이고 순회의 끝은 중위 순회할 때 마지막 노드이다. 이때 루트 노드는 항상 1번 노드이다. 유사 중위 순회는 루트 노드에서 시작하며, 다음과 같이 진행된다. 현재 위치한 노드의 왼쪽 자식 노드가 존재하고 아직 방문하지 않았다면, 왼쪽 자식 노드로 이동한다. 그렇지 않고 현재 위치한 노드의 오른쪽 자식 노드가 존재하고 아직 방문하지 않았다면, 오른쪽 자식 노드로 이동한다. 그렇지 않고 현재 노드가 유사 중위 순회의 끝이라면, 유사 중위 순회를 종료한다. 그렇지 않고 부모 노드가 존재한다면, 부모 노드로 이동한다. 유사 중위 순회를 종료할 때까지 1 ~ 4를..

[C++] 백준 2961 - 도영이가 만든 맛있는 음식 [내부링크]

문제 이해 단계 문제 도영이는 짜파구리 요리사로 명성을 날렸었다. 이번에는 이전에 없었던 새로운 요리에 도전을 해보려고 한다. 지금 도영이의 앞에는 재료가 N개 있다. 도영이는 각 재료의 신맛 S와 쓴맛 B를 알고 있다. 여러 재료를 이용해서 요리할 때, 그 음식의 신맛은 사용한 재료의 신맛의 곱이고, 쓴맛은 합이다. 시거나 쓴 음식을 좋아하는 사람은 많지 않다. 도영이는 재료를 적절히 섞어서 요리의 신맛과 쓴맛의 차이를 작게 만들려고 한다. 또, 물을 요리라고 할 수는 없기 때문에, 재료는 적어도 하나 사용해야 한다. 재료의 신맛과 쓴맛이 주어졌을 때, 신맛과 쓴맛의 차이가 가장 작은 요리를 만드는 프로그램을 작성하시오. 입력 첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에..

[Unity 3D] 팝업시스템(2) - 버튼 기능 구현(싱글톤, 델리게이트 활용) [내부링크]

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

[C++] 백준 20207 - 달력 [내부링크]

문제 이해 단계 수현이는 일 년의 날짜가 1일부터 365일로 표시되어 있는 달력을 가지고 있다. 수현이는 너무나도 계획적인 사람이라 올해 일정을 모두 계획해서 달력에 표시해 놨다. 여름이 거의 끝나가자 장마가 시작되었고, 습기로 인해 달력에 표시한 일정이 지워지려고 한다. 지워지는 것을 막고자 수현이는 일정이 있는 곳에만 코팅지를 달력에 붙이려고 한다. 하지만 너무 귀찮았던 나머지, 다음과 같은 규칙을 따르기로 한다. 연속된 두 일자에 각각 일정이 1개 이상 있다면 이를 일정이 연속되었다고 표현한다. 연속된 모든 일정은 하나의 직사각형에 포함되어야 한다. 연속된 일정을 모두 감싸는 가장 작은 직사각형의 크기만큼 코팅지를 오린다. 달력은 다음과 같은 규칙을 따른다. 일정은 시작날짜와 종료날짜를 포함한다. ..

[Unity 3D] 팝업시스템(1)- 텍스트 길이에 반응하는 팝업창 구현 및 설명 [내부링크]

1. 레이아웃 생성 및 설정 캔버스의 하위 요소로 빈 오브젝트인 max와 그 하위 오브젝트인 popup을 만든다. max와 popup에 Vertical Layout Group 컴포넌트를 추가한다. max - 만들고 있는 팝업의 최대 크기를 결정하기 위해 생성 최대 영역의 크기를 보기 위해 임시로 이미지 삽입 Child Alignment를 Middle Center로 맞춘다. → 팝업 텍스트 가운데 정렬 Control Child Size Width/Height를 체크한다. 하위 요소에 의해서 사이즈가 결정되도록 함. → 텍스트의 길이에 따라 팝업창의 길이를 조절하기 위함 Child Force Expand Width/Height 체크를 해제 PopUp 하위 요소로 팝업 배경을 위한 Image UI(BackGr..

[Unity 3D] UI - Layout Element 개념 정리 및 Text에 활용 [내부링크]

해당 포스팅은 Layout과 Layout Controller의 개념을 알고 있다는 전제로 하는 설명이기 때문에 모르시는 분은 아래 링크로 가서 먼저 Layout Controller에 대한 개념을 먼저 보시는 것을 추천드립니다. [Unity 3D] UI 레이아웃 개념과 컨트롤러(Layout Controller) 기초 정리 Layout Controller 오브젝트를 일정한 규칙에 따라 배치하는 것 Inspector : 디버그(Debug) 모드 Min Width : 최소한의 너비 Min Height : 최소한의 높이 Preferred Width : 선호되는 너비 Preferred Height : 선호되는 높이 howudong.tistory.com Layout Element Layout Controller 안에..

[C++] 백준 2239 - 스도쿠 (그림 설명) [내부링크]

문제 이해 단계 문제 스도쿠는 매우 간단한 숫자 퍼즐이다. 9 ×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3 ×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다음을 보자. 위 그림은 참 잘도 스도쿠 퍼즐을 푼 경우이다. 각 행에 1부터 9까지의 숫자가 중복 없이 나오고, 각 열에 1부터 9까지의 숫자가 중복 없이 나오고, 각 3 ×3짜리 사각형(9개이며, 위에서 색깔로 표시되었다)에 1부터 9까지의 숫자가 중복 없이 나오기 때문이다. 하다 만 스도쿠 퍼즐이 주어졌을 때, 마저 끝내는 프로그램을 작성하시오. 입력 9개의 줄에 9개의 숫자로 보드가 입력된다. 아직 숫자가 채워지지 않은 칸에는 0이 주어진다. 출력 9개의 줄에 9개의 숫자로 ..

[C++] 백준 16926 - 배열돌리기 1 [내부링크]

문제 이해 단계 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] ↓ ↓ ↑ ↑ A[3][1] A[3][2] → A[3][3] → A[3][4] A[3][5] ↓ ↑ A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5] 예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다. 1 2 3 4 2 3 4 8 3 4 8 6 5 6 7 8 1 7 7 6 2 7 8 2 9 8 7 6 → 5 6 8 2 → 1 7 6 3 5 4 3 2 9 ..

[Unity 3D] UI 레이아웃 개념과 컨트롤러(Layout Controller) 기초 정리 [내부링크]

Layout Controller 오브젝트를 일정한 규칙에 따라 배치하는 것 Inspector : 디버그(Debug) 모드 Min Width : 최소한의 너비 Min Height : 최소한의 높이 Preferred Width : 선호되는 너비 Preferred Height : 선호되는 높이 Flexible Width : 너비가 늘어나는가? Flexible Height : 높이가 늘어나는가? Layout Component 사용하기 색이 다른 이미지 UI 4개를 만들어두고 빈 오브젝트 layout의 하위 오브젝트로 설정 Horizontal Layout Group Vertical Layout Group도 속성이 똑같음. layout 오브젝트에 Horizontal Layout Group 컴포넌트를 추가 위와 같이..

[Unity 3D] 패킹(Packing)의 필요성과 두가지 시스템( Legacy, Atlas ) [내부링크]

Draw Call(Batches) Batches(Draw Call) : CPU가 GPU에게 렌더링 할 항목(텍스처)들을 미리 알려주는 것 어떤 값을 넘겨주냐에 따라서 Draw Call이 결정 Draw Call 관리가 중요한 이유 Draw Call이 쌓일수록 전체적인 성능이 급격히 저하 모바일은 최대 100개 이하의 Draw Call을 유지해야 함 Draw Call을 줄이기 위해 Packing을 사용 Packing Sprite를 하나로 묶는 것 원하는 텍스처들을 가지고 있는 텍스처 뭉치를 만드는 것 Packing 원리 텍스처 하나를 Draw Call을 보냄 하나의 Draw Call 안에서 두 개의 스프라이트를 Render CPU가 GPU에게 텍스쳐를 요청하는 명령을 한 번만 처리할 수 있게 만듦 → 여러 ..

[C++] 백준 15787 - 기차가 어둠을 헤치고 은하수를 [내부링크]

문제 이해 단계 N개의 기차가 어둠을 헤치고 은하수를 건너려고 한다. 기차는 20개의 일렬로 된 좌석이 있고, 한 개의 좌석에는 한 명의 사람이 탈 수 있다. 기차의 번호를 1번부터 N번으로 매길 때, 어떠한 기차에 대하여 M개의 명령이 주어진다. 명령의 종류는 4가지로 다음과 같다. 1 i x : i번째 기차에(1 ≤ i ≤ N) x번째 좌석에(1 ≤ x ≤ 20) 사람을 태워라. 이미 사람이 타있다면 , 아무런 행동을 하지 않는다. 2 i x : i번째 기차에 x번째 좌석에 앉은 사람은 하차한다. 만약 아무도 그자리에 앉아있지 않았다면, 아무런 행동을 하지 않는다. 3 i : i번째 기차에 앉아있는 승객들이 모두 한칸씩 뒤로간다. k번째 앉은 사람은 k+1번째로 이동하여 앉는다. 만약 20번째 자리에..

[C++] 백준 16719 - ZOAC [내부링크]

문제 이해 단계 문제 2018년 12월, 처음 시작하게 된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 앞 글자부터 하나씩 보여주는 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로운 규칙을 고안해 냈다! 규칙은 이러하다. 아직 보여주지 않은 문자 중 추가했을 때의 문자열이 사전 순으로 가장 앞에 오도록 하는 문자를 보여주는 것이다. 예를 들어 ZOAC를 보여주고 싶다면, A → AC → OAC → ZOAC 순으로 보여주면 된다. 바쁜 성우를 위하여 이 규칙대로 출력해 주는 프로그램을 작성하시오. 입력 첫 번째 줄에 알파벳 대문자로 구성된 문자열이 주어진다. 문자열의 길이는 최대 100자이다. 출력 규칙에 맞게 순서대로 문자열을 출력한다. 예제 입력 1 ZOAC ..

[C++] 백준 20164 - 홀수 홀릭 호석 [내부링크]

문제 이해 단계 호석이는 짝수랑 홀수 중에서 이니셜이 같은 홀수를 더 좋아한다. 운전을 하던 호석이는 앞차의 번호판이 홀수로 가득할 때 사랑스러움을 느낄 정도이다. 전화번호도 홀수만 있고 싶다. 그렇게 홀수 홀릭에 빠진 호석이는 가지고 있는 수 N을 일련의 연산을 거치면서, 등장하는 숫자들에서 홀수를 최대한 많이 많이 보고 싶다. 하나의 수가 주어졌을 때 호석이는 한 번의 연산에서 다음과 같은 순서를 거친다. 수의 각 자리 숫자 중에서 홀수의 개수를 종이에 적는다. 수가 한 자리이면 더 이상 아무것도 하지 못하고 종료한다. 수가 두 자리이면 2개로 나눠서 합을 구하여 새로운 수로 생각한다. 수가 세 자리 이상이면 임의의 위치에서 끊어서 3개의 수로 분할하고, 3개를 더한 값을 새로운 수로 생각한다. 호석..

[C++] 백준 2615 - 오목 [내부링크]

문제 이해 단계 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번,... ,19번의 번호가 붙고 세로줄은 왼쪽에서부터 오른쪽으로 1번, 2번,... 19번의 번호가 붙는다. 위의 그림에서와 같이 같은 색의 바둑알이 연속적으로 다섯 알을 놓이면 그 색이 이기게 된다. 여기서 연속적이란 가로, 세로 또는 대각선 방향 모두를 뜻한다. 즉, 위의 그림은 검은색이 이긴 경우이다. 하지만 여섯 알 이상이 연속적으로 놓인 경우에는 이긴 것이 아니다. 입력으로 바둑판의 어떤 상태가 주어졌을 때, 검은색이 이겼는지, 흰색이 이겼는지 또는 아직 승부가 결정되지 않았는지를 판단하는 프로그램을 작성. ..

[Unity 3D] 나인슬라이스(9-Slice)의 사용법과 필요성 [내부링크]

9 Slice 이미지를 9조각으로 나누어 영역별로 사이즈를 조절하는 테크닉 Image Type Image 컴포넌트 속성 중 Image Type에서 사용 Sliced와 Tiled에서 사용 9 Slice가 되어있지 않으면 Sliced와 Tiled 사용 불가능 9 Slice 사용 Project에 이미지 원본 파일을 클릭 Inspector에서 Sprite Editor 클릭 아래와 같이 초록색 선으로 9개의 네모 영역을 만든 후, 우측 상단에 Apply 경고 문구가 사라진 것을 확인할 수 있다. 9 Slice를 하면 뭐가 다를까? 그림으로 보는 것이 가장 빠르다. 왼쪽은 Sliced 적용 / 오른쪽은 Simple 이미지이다. Simple은 크기가 바뀔 때마다 전체 이미지 비율이 그에 상응하여 바뀐다. Sliced..

[C++] 백준 17276 - 배열 돌리기 ( 덱을 이용한 풀이 ) [내부링크]

문제 이해 단계 크기가 n x n인 2차원 정수 배열 X가 있다. (n은 홀수) X를 45 의 배수만큼 시계방향 혹은 반시계방향으로 돌리려고 한다. X를 시계 방향으로 45 돌리면 아래와 같은 연산이 동시에 X에 적용되어야 한다: X의 주 대각선을 ((1,1), (2,2), …, (n, n)) 가운데 열 ((n+1)/2 번째 열)로 옮긴다. X의 가운데 열을 X의 부 대각선으로 ((n, 1), (n-1, 2), …, (1, n)) 옮긴다. X의 부 대각선을 X의 가운데 행 ((n+1)/2번째 행)으로 옮긴다. X의 가운데 행을 X의 주 대각선으로 옮긴다. 위 네 가지 경우 모두 원소의 기존 순서는 유지 되어야 한다. X의 다른 원소의 위치는 변하지 않는다. 반시계 방향으로 45 돌리는 경우도 위와 ..

[Unity 3D] Rect Transform 이해하고 응용하기 [내부링크]

RectTransform UI 한정에서 사용해서 컴포넌트 Transform을 상속받음 Transform의 속성/기능 사용 가능 UI는 모두 Transform 대신 RectTransform임 RectTransform 속성 UI 좌표계는 스크린과 다르게 한가운데가 (0,0,0)으로 시작 이는 Anchors(앵커)의 디폴트 값이 (0,0,0)이기 때문 → 앵커 값을 변경하면 포지션 값이 달라진다. 포지션은 Pivot(피벗)과 Anchor(앵커)의 영향을 받는다. Rotation, Scale - Transfrom과 같음. 단, Scale에 Z는 존재하지 않음 Pivot(피벗) Rect Transform의 Position은 Anchor을 원점으로 잡고 가운데 Pivot까지의 거리를 측정하여 UI를 배치 Ancho..

[C++] 프로그래머스 Level 3 - 섬 연결하기 [내부링크]

문제 이해 단계 문제 설명 n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요. 다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다. 예를 들어 A 섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A 섬과 C 섬은 서로 통행 가능합니다. 제한사항 섬의 개수 n은 1 이상 100 이하입니다. costs의 길이는 ((n-1) * n) / 2이하입니다. 임의의 i에 대해, costs[i][0] 와 costs[i] [1]에는 다리가 연결되는 두 섬의 번호가 들어있고, costs[i] [2]에는 이 두 섬을 연결하는 다리를 건설할 때..

[C++] 프로그래머스 Level 4 - 도둑질 [내부링크]

문제 이해 단계 문제 설명 도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 두 집을 털면 경보가 울립니다. 각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 return 하도록 solution 함수를 작성하세요. 제한사항 이 마을에 있는 집은 3개 이상 1,000,000개 이하입니다. money 배열의 각 원소는 0 이상 1,000 이하인 정수입니다. 입출력 예 입력 - money : [ 1,2,3,1 ] 출력 - 4 집이 원형으로 배치되어 있고, 한 집을 선택하면 양 옆에 있는 집을 선택할 수 없게 된다. 이러한 조건일 때 얻..

[C++] 프로그래머스 Level 3 - 등굣길 [내부링크]

문제 이해 단계 문제 설명 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = 4, n = 3인 경우입니다. 가장 왼쪽 위, 즉 집이 있는 곳의 좌표는 (1, 1)로 나타내고 가장 오른쪽 아래, 즉 학교가 있는 곳의 좌표는 (m, n)으로 나타냅니다. 격자의 크기 m, n과 물이 잠긴 지역의 좌표를 담은 2차원 배열 puddles이 매개변수로 주어집니다. 오른쪽과 아래쪽으로만 움직여 집에서 학교까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지를 return 하도록 solution 함수를 작성해 주세요. 제한사항 격자의 크기 m, n은 ..

[C++] 프로그래머스 Level 3 - N으로 표현 [내부링크]

문제 이해 단계 문제 설명 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5) 12 = 55 / 5 + 5 / 5 12 = (55 + 5) / 5 5를 사용한 횟수는 각각 6,5,4입니다. 그리고 이중 가장 작은 경우는 4입니다. 이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현할 수 있는 방법 중 N 사용 횟수의 최솟값을 return 하도록 solution 함수를 작성하세요. 제한사항 N은 1 이상 9 이하입니다. number는 1 이상 32,000 이하입니다. 수식에는 괄호와 사칙연산만 가능하며 나누기 연산에서 나머지는 무시합니다. 최솟값이 8보다 크면 -1을 return 합니다. 예제 11 = 22 / 2와 같..

[C++] 프로그래머스 Level 3 - 퍼즐 조각 채우기 [내부링크]

문제 이해 단계 테이블 위에 놓인 퍼즐 조각을 게임 보드의 빈 공간에 적절히 올려놓으려 합니다. 게임 보드와 테이블은 모두 각 칸이 1x1 크기인 정사각 격자 모양입니다. 이때, 다음 규칙에 따라 테이블 위에 놓인 퍼즐 조각을 게임 보드의 빈칸에 채우면 됩니다. 조각은 한 번에 하나씩 채워 넣습니다. 조각을 회전시킬 수 있습니다. 조각을 뒤집을 수는 없습니다. 게임 보드에 새로 채워 넣은 퍼즐 조각과 인접한 칸이 비어있으면 안 됩니다. 다음은 퍼즐 조각을 채우는 예시입니다. 위 그림에서 왼쪽은 현재 게임 보드의 상태를, 오른쪽은 테이블 위에 놓인 퍼즐 조각들을 나타냅니다. 테이블 위에 놓인 퍼즐 조각들 또한 마찬가지로 [상, 하, 좌, 우]로 인접해 붙어있는 경우는 없으며, 흰 칸은 퍼즐이 놓이지 않은 ..

[C++] 프로그래머스 Level 3 - 여행 경로 [내부링크]

문제 이해 단계 문제 설명 주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다. 항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해 주세요. 제한사항 모든 공항은 알파벳 대문자 3글자로 이루어집니다. 주어진 공항 수는 3개 이상 10,000개 이하입니다. tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다. 주어진 항공권은 모두 사용해야 합니다. 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다. 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다. 입출력 예 설명 예제 #1 ["I..

[Unity 3D] Image 와 Text 컴포넌트 및 프로퍼티 의미와 활용법 정리 [내부링크]

Image Canvas Renderer : 상위 Canvas의 UI 요소라는 뜻 Source Image 화면에 나타날 이미지 Sprite 형식의 텍스쳐 타입(Texture Type)만 넣을 수 있음 다른 타입은 넣을 수 없다. Raycast Target 버튼 클릭 같은 터치 이벤트가 해당 UI에 의해 가려질 수 있는가를 설정 뒤에 있는 버튼이 앞에 Image에 가려져 있다고 가정 Raycast Target 체크 → Raycast가 이미지 통과 못함(버튼 클릭 안됨) Raycast Traget 체크 X → Raycast 이미지 통과(버튼 클릭) Image Type Simple : Sprite를 Rect 크기에 따라 그대로 넣는다. Sliced : 스프라이트를 9개의 영역으로 나누어 각자 다른 방식으로 리사..

[Unity 3D] 캔버스(Canvas)와 UI 기본 개념과 자주 쓰는 옵션 정리 [내부링크]

UI UI Component를 생성하면 Canvas, EventSystem도 같이 생성됨 UI 가 화면에 나타나기까지의 과정 3D 렌더링 시스템에서 Vertex(정점)가 Vertex Buffer에 들어감 Vertex Buffer : 렌더링에 사용할 Vertex를 모아놓은 버퍼 Vertex(정점) : 3D 모델링의 가장 기본 단위 정점들이 도형(Polygon)을 이루게 됨 Polygon들이 모여 하나의 모델을 이루게 됨 Canvas 스크린과 매칭되는 UI 출력 영역(도화지) Vertex Buffer가 위치하는 곳 UI가 Canvas의 자식요소여야 볼 수 있음 UI들의 Vertex(정점)들은 사실상 UI가 아닌 Canvas에 저장됨 Canvas Render Mode Screen Space - Overlay ..

[Unity 3D] 에셋(Asset) 호출 및 적용, 그리고 생성 [내부링크]

에셋 파일은 같은 프로젝트 내에서 GUID로 식별된다. 뿐만 아니라 이 GUID를 이용하여 에셋 파일을 호출하고, 조작하고, 생성하는 등 여러 가지 작업을 한다. GUID에 대해서는 예전에 포스팅해둔 글을 밑에 넣어둔다. https://howudong.tistory.com/153 [Unity 3D] 유니티 에셋(Asset)의 식별되는 원리 유니티 에셋이란? 유니티 에셋은 게임 제작에 필요한 모든 요소들을 말한다. 3D 모델, 텍스쳐 이미지, 사운드, 파티클 효과, 유틸리티 등을 모두 유니티에서는 에셋이라고 부른다. 유니티 에셋 내 howudong.tistory.com 유니티 에셋 호출(불러오기) using UnityEditor; public class TestEditWindow : EditorWindow..

[Unity 3D] 유니티 에셋(Asset)의 식별되는 원리 [내부링크]

유니티 에셋이란? 유니티 에셋은 게임 제작에 필요한 모든 요소들을 말한다. 3D 모델, 텍스쳐 이미지, 사운드, 파티클 효과, 유틸리티 등을 모두 유니티에서는 에셋이라고 부른다. 유니티 에셋 내부 유니티 에셋은 무엇으로 이루어져 있을까? 한번 직접 프로젝트 폴더를 열어 알아보자. 에셋 폴더에 있는 Scenes.meta 파일을 텍스트 편집기로 열어본 결과이다. 여러 개의 설정 값들이 적혀있는 것을 확인할 수 있다. 여기서 핵심은 guid라고 적힌 값이다. 유니티에서는 guid를 통해 에셋들을 식별한다. GUID GUID는 유니티에서 에셋들을 구분하기 위해서 주어진 고유한 값이다. 같은 프로젝트 내에서는 고유한 값으로 존재한다고 보면 된다. 즉, 다른 프로젝트라면 같은 GUID 값이 존재할 수 있다는 말이다..

[Unity 3D] 에디터 창(Editor Window)와 인스펙터(Inspector) 연결하기 [내부링크]

목표 https://howudong.tistory.com/149 [Unity 3D] GUI를 이용한 인스펙터(Inspector) 커스터마이징 목표 오브젝트에 스크립트를 넣어 인스펙터 뷰를 커스터마이징 직렬화(Serialization) - 해당 필드를 유니티가 인식할 수 있는 상태로 만드는 것 - 유니티가 처리할 수 있는 형태로 만드는 것 - Inspect howudong.tistory.com 해당 포스팅에서 했던 GUI를 이용한 인스펙터 커스터마이징을 응용하여, 자신이 만든 에디터 창(Editor Window)과 인스펙터(Inspector)를 연결하겠다. 연결한다는 말은, 에디터 창에서 프로퍼티의 값을 조절하면 인스펙터에도 적용되고, 그 반대도 적용되는 것을 말한다. 프로퍼티 값 초기화(가져오기/불러오기..

[C++] 프로그래머스 Level 2 - 큰 수 만들기 [내부링크]

문제 이해 단계 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24]를 만들 수 있습니다. 이 중 가장 큰 숫자는 94입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한 조건 number는 2자리 이상, 1,000,000자리 이하인 숫자입니다. k는 1 이상 number의 자릿수 미만인 자연수입니다. 입출력 예 num k return "1924" 2 "94" "1..

[Unity 3D] GUI를 이용한 인스펙터(Inspector) 커스터마이징 [내부링크]

목표 오브젝트에 스크립트를 넣어 인스펙터 뷰를 커스터마이징 직렬화(Serialization) - 해당 필드를 유니티가 인식할 수 있는 상태로 만드는 것 - 유니티가 처리할 수 있는 형태로 만드는 것 - Inspect를 조작하기 위해선 직렬화는 필수적인 과정 -> 유니티가 직렬화할 수 있는 오브젝트를 만들어야 한다. CustomEditor와 Editor 우선 커스터마이징할 스크립트[CustomScript]를 작성한다. public class CustomScript : MonoBehaviour { public GameObject otherObject; public string myName; public int myHp; } 커스터마이징 에디터 스크립트[CustomEditorTest]를 CustomScript..

[Unity 3D] GUI 에서의 Event의 역할 및 사용 [내부링크]

Event OnGUI()를 호출하는 주체(OnGUI 보다 Low-Level) - 사용자와의 입력과 상호작용 - 트리거들을 공통적으로 처리하는 예약된 함수들이 정의되어 있다 - 효율성을 위해 OnGUI() 내부 코드와 현재 Event의 관계 여부에 따라 무시할 수 있음 1. 현재 이벤트가 드로잉이 아닌데, 드로잉 관련 코드를 만나면 그 코드를 무시 2. MouseClick 이벤트로 OnGUI()가 호출되면 해당 흐름에서는 Drawing 수행 코드 무시 Event 종류 Event.current: 현재 OnGUI()를 호출하게 된 Event Layout Event: Repaint 전 GUI들의 배치 값 관련 수집 이벤트 유니티 상단에 MyTool/OpenTool을 눌러 생성된 창 위에 마우스를 올리고 클릭, ..

[Unity 3D] GUI Content 와 GUI Style 개념과 사용법 정리 [내부링크]

GUI Content '무엇을 그릴까?'에 대한 클래스 아래와 같이 GUIContent를 생성하여 사용한다. private void OnGUI() { var myContent = new GUIContent(); //GUIContent 생성 myContent.text = "textText"; myContent.image = EditorGUIUtility.FindTexture("AvatarController.Layer"); EditorGUILayout.LabelField(myContent); // myContent Label 생성 myContent.tooltip = "this is ToolTip"; // 마우스 위에 대면 나오는 거 GUILayout.Button(myContent); } myContent에 ..

[Unity 3D] GUI 레이아웃 시스템(Layout System) 이해하고 사용하기 [내부링크]

GUI 레이아웃 시스템을 이해함으로써, Layout을 좀 더 세밀하게 다룰 수 있다. 예를 들어, EditorGUILayout.Label() 함수를 사용하여 여러 Label을 GUI로 만들면 세로로 Label들이 배치될 것이다. 하지만 LayoutSystem을 이해하고 지금부터 배우는 새로운 함수를 사용하면 좀 더 복잡한 배치가 가능해진다. 가로/세로 배치 // Layout을 가로로 배치한다. EditorGUILayout.BeginHorizontal(); { .. 원하는 GUI 배치 내용물 입력 } EditorGUILayout.EndHorizontal(); // Layout을 세로로 배치한다. EditorGUILayout.BeginVertical(); { .. 원하는 GUI 배치 내용물 입력 } Edit..

[Unity 3D] 많이 사용되는 GUI 요소 그룹 사용법 정리 [내부링크]

EditorGUILayout 함수 using UnityEngine; using UnityEditor; public class TestEditorWindow : EditorWindow { int intValue; float floatValue; Color colorValue; Gradient gradientValue = new Gradient(); Rect rectValue; Vector3 vector3Value; Vector3Int vectorInt3Value; UnityEngine.Object objectValue; string passwordValue; string tagValue; UnityEngine.ParticleSystemCollisionType enumValue; private void On..

[Unity 3D] GUI 4가지 생성 방식과 방식 간의 차이 정리 [내부링크]

스크립트 기본 준비 기본적으로 GUI를 사용하기 위해서는 2가지 사전 준비가 필요하다. 1. 스크립트에 UnityEditor를 사용함을 명시한다. 2. 해당 클래스의 부모를 EditWindow로 지정한다. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; // UnityEditor 사용 public class TestEditorWindow : EditorWindow // EditorWindow를 부모로 지정 { } 유니티 Scene에 새로운 스크립트 TestEditorWindow를 만들어 위와 같이 수정한다. 새로운 윈도우 만들기 GUI를 만드려면 그 GUI를 그리기 위한 도화지(..

[네트워크 보안] 커버로스(Kerberos) 인증 프로토콜 개념 및 특징 정리 [내부링크]

개요 대칭키 암호를 이용하는 하나의 인증체계 장점 : 공개키 기반구조(PKI)가 요구되지 않는다. LAN과 같은 소규모 네트워크에서 사용할 수 있도록 설계 인증 및 비밀성과 무결성이 요구되는 세션키를 생성하기 위해 이용 원칙적으로 어떤 대칭암호든 커버로스로 이용 가능 → 하지만, 오늘날에는 커버로스 대신 DES가 쓰임 대칭키를 기반을 하지만 N명에 사용자에 대해 오직 N개의 키만 필요 기존 대칭키 기반 인증체계에서는 N명의 사용자가 있으면 \(N(N-1)/2 \approx N^2\) 의 키 필요 → 대칭키 기반 인증에서는 이용자와 키의 개수는 정비례 관계가 아님 커버로스는 가능한 이유? 제3의 신뢰성 있는 기관(TTP)에 의존하기 때문 커버로스 TTP는 시스템 보안의 핵심 구성요소 → 반드시 보호 필요 ..

[소프트웨어공학] 소프트웨어 추정치 추정 기법과 COCOMO 모델 분석 [내부링크]

추정 기법 조직은 소프트웨어 노력과 비용 추정치를 만들어야 함 두 종류의 기법을 사용하여 추정치를 구함 경험 기반 기법 관리자의 과거 프로젝트 경험과 애플리케이션 도메인을 근거로 노력 요구사항을 추정 알고리즘 비용 모델 프로젝트 노력을 계산하기 위해 크기와 같은 제품 속성의 추정치, 프로세스 특성, 참여한 직원들의 경험을 근거로 하는 공식적 접근법 사용 추정 불확실성 경험 기반 접근법 관리자의 경험, 이 프로젝트에서 소프트웨어 개발에 관련된 활동들을 위해 투입된 실제 노력에 의존 전형적으로 프로젝트에서 생성되는 산출물들과 개발될 여러 소프트웨어 컴포넌트 또는 시스템 식별 스프레드 시트로 문서화, 개별적 추정, 필요한 총 노력 계산 그룹 내의 멤버들에게 자신의 추정치를 설명할 것을 요청하는 것은 도움이 됨..

[소프트웨어공학] 방식 별 프로젝트 일정 관리 및 애자일 계획 수립 접근법 정리 [내부링크]

프로젝트 일정관리 다음의 항목들을 결정 프로젝트 내용을 분리된 작업들로 조직하는 방법 각각의 작업들이 실행되는 시점 각각의 작업들을 실행할 방법 다음의 업무를 수행 각각의 작업을 완료하는데 필요한 시간과 노력 추정 작업 수행 인원 제안 각 작업을 완료하는데 필요한 하드웨어와 소프트웨어 자원들 추정 → 초기 프로젝트 일정은 프로젝트 시동단계에서 생성되며, 자주 갱신되고 수정됨 계획 주도 및 애자일 프로세스에서의 프로젝트 일정 두 경우 다 초기 프로젝트 일정 필요 계획 주도 프로젝트 프로젝트 관련 업무를 분리된 작업들로 나누고 각각의 작업을 완료하는데 필요한 시간 추정 애자일 프로젝트 계획 주도 프로젝트보다는 덜 상세한 내용 프로젝트 주요 단계들이 언제 완료될지 식별하는 전반적인 일정이 있어야 함. 프로젝트..

[소프트웨어공학] 단계별 프로젝트 계획 수립 전략과 계획 주도 개발 [내부링크]

프로젝트 계획 수립 프로젝트 계획 수립은 프로젝트 생명 주기의 세 단계에서 일어남 소프트웨어 프로젝트 관리자의 가장 중요한 업무 중 하나 작업들을 작은 작업들로 나눔 나눈 작업들을 프로젝트 팀 멤버들에게 할당 발생할 수 있는 문제들에 대해 예측 문제들에 대한 잠정적인 해결책 준비 프로젝트 계획 작업이 진행될 방법을 보이고 프로젝트의 진척사항을 평가하기 위해 사용 프로젝트를 시작하면서 생성하고 프로젝트가 진행되면서 수정 프로젝트 계획 수립은 프로젝트 생명 주기의 세 단계에서 일어남 제안 단계 소프트웨어 시스템을 개발 또는 공급하는 계약을 수주하기 위해 응찰할 때 작업 완수를 위한 자원을 가지고 있는지 판단하는 것을 돕는다 언급해야 하는 가격 측정 계획을 위해 필요 프로젝트 시작 단계 누가 프로젝트에서 작업..

[소프트웨어공학] 프로젝트 관리를 위한 리스크 프로세스 및 인간 관리 [내부링크]

프로젝트 관리 소프트웨어 공학의 본질적인 부분 전문적인 소프트웨어 공학은 항상 조직의 예사과 일정에 대한 제약조건의 영향을 받음 프로젝트 관리자의 임무 제약조건을 만족하고 극복하면서 고품질의 소프트웨어를 인도하도록 보장 프로젝트 주요 목표 약속된 기한까지 고객에게 소프트웨어 인도 전체 비용을 예산 범위 이내에서 지출 고객의 기대치를 충족하는 소프트웨어 인도 일관적이고 잘 운영되는 개발팀 유지 소프트웨어 관리가 어려운 점 소프트웨어 제품은 형체가 없음 관리자는 개발 중인 제품에 대한 진척사항을 볼 수 없음 대형 소프트웨어 프로젝트는 종종 일회성 프로젝트임 대형 프로젝트는 개발되는 환경이 다른 것들과는 어느 정도 다르기 때문에 고유함 소프트웨어 프로세스는 변동이 심하고 조직마다 다름 소프트웨어 기업들은 완전..

[소프트웨어공학] 소프트웨어 진화 프로세스와 레거시 시스템 [내부링크]

소프트웨어 진화 개발과 진화의 나선형 모델 소프트웨어 공학은 나선형 프로세스로 생각할 수 있음 시스템의 수명동안 요구분석, 설계, 구현, 테스팅이 반복 지난 10년 동안 나선의 반복 사이 시간은 극적으로 줄어듦 경쟁자들의 압박과 사용자들의 피드백에 빠르게 반응해야 함 동일한 회사가 소프트웨어의 수명 동안 책임을 지는 경우에 적용 가능 맞춤식 소프트웨어의 진화 나선형 모델을 따르지 않음 고객이 소프트웨어 지원과 진화를 감당 고객이 시스템 지원과 진화를 담당하는 외부 회사와 별도 계약을 체결 진화 프로세스가 불연속적일 가능성 있음 요구사항과 설계 문서가 한 기업에서 다른 기업으로 전달되지 않을 수 있음 소프트웨어 유지보수 소프트웨어가 개발에서 진화로 매끄럽게 전이되지 않을 때, 사용자에게 인도된 이후의 소프..

[소프트웨어공학] 소프트웨어 테스팅 프로세스 여러 기법 및 모델 정리 [내부링크]

소프트웨어 테스팅 목적 : 잘 수행되는지 확인 및 프로그램 사용 전 결함 발견 테스팅 방법 : 인위적인 데이터를 이용하여 프로그램 실행 점검 대상 : 오류, 이상, 또는 프로그램의 비기능적 속성에 관한 정보 소프트웨어 테스트 종류 검증 테스팅 시스템의 예상된 사용을 반영하는 테스트 케이스 집합 이용 시스템이 정확하게 수행되는 것을 기대 결함 테스팅 테스트 케이스는 결함을 드러낼 수 있도록 설계 소프트웨어의 동작이 부정확하거나, 명세에 따르지 않게 되는 입력 또는 입력 순서를 찾음 두 접근법 간의 명확한 경계는 없음 프로그램 테스팅의 입출력 모델 및 테스트 과정 시스템이 블랙박스로서 테스트되는 경우로 가정 결함 테스팅의 우선순위 → 집합 \(I_e\)에 속한 입력을 찾는 것 시스템에 있는 문제를 드러내기 ..

[소프트웨어공학] 소프트웨어 설계 디자인 패턴 정리 및 구현 이슈 관리 [내부링크]

디자인 패턴 패턴 문제와 그 해법의 핵심을 기술한 것 여러 환경에서 재사용될 수 있음 상세한 명세가 아님 객체 지향 소프트웨어 설계에 큰 영향을 줌 디자인 패턴 객체 지향 설계와 연관 공개된 패턴 - 일반성을 제공하기 위한 상속과 다형성 같은 객체 특성에 의존 패턴 적용 일반 원칙 어떤 종류의 소프트웨어 설계에도 똑같이 적용 가능하게 하는 것 디자인 패턴의 네가지 핵심 요소 패턴을 지칭하는 의미있는 이름 패턴이 적용될 수 있는 환경을 설명하는 문제 영역에 대한 서술 설계 해법의 구성요소들에 대한 서술 및 그들의 관계와 책임 구체적 설계 기술이 아닌 다른 방법으로 인스턴스화될 수 있는 설계 해법을 위한 템플릿 패턴을 적용한 결과에 대한 서술 설계자가 특성 상황에 패턴을 사용할 수 있는지를 결정하는데 도움 ..

[소프트웨어공학] 소프트웨어 설계와 구현 시 여러 방식과 사용 모델 분석 [내부링크]

소프트웨어 설계와 구현 실행 가능한 소프트웨어 시스템이 개발되는 소프트웨어 공학 프로세스 단계 간단한 시스템 소프트웨어 설계와 구현을 의미 다른 모든 소프트웨어 공학 활동들은 이 프로세스에 병합 큰 시스템 많은 소프트웨어 공학 프로세스들 중 하나 설계 고객의 요구사항을 기반으로 소프트웨어 컴포넌트들과 그들 간의 관계를 식별하는 창의적인 활동 구현 설계를 프로그램으로 실현하는 프로세스 설계 방식 때때로 분리된 설계 단계가 있어 설계가 모델링되고 문서화됨 프로그래머의 머리에 있거나 화이트보드나 종이에 개략적으로 스케치 → 항상 프로세스가 있는 것은 아님 설계 시 구현 이슈 설계 문서화를 위해 UML를 사용하는 것 객체 지향 언어로 프로그래밍 → 적절 동적 타입 언어 → 부적절 애자일 방법 사용 설계할 때 대..

[소프트웨어공학] 애플리케이션 아키텍처 모델과 시스템(+ 참조 아키텍처) [내부링크]

애플리케이션 아키텍처 개발/도입 이유 비즈니스 또는 조직의 필요를 만족시키기 위해 비즈니스들은 해당 영역에 특화된 공통 애플리케이션 사용 → 이런 공통점으로 인해 아키텍처 도입 애플리케이션 아키텍처 시스템 클래스의 주요 특성 포함 예: 실시간 시스템 - 데이터 수집 시스템 또는 모니터링 시스템 같은 유형의 시스템을 개발 시 공통적인 아키텍처 구조를 재사용 비즈니스 시스템에서 애플리케이션 아키텍처 재사용을 함 애플리케이션 아키텍처 모델 사용법 아키텍처 설계 프로세스의 시작점 개발하는 애플리케이션 유형에 익숙하지 않은 경우에 해당 초기 설계를 일반 애플리케이션 아키텍처에 기반을 두고 시작 추후 개발할 특정 시스템을 위해 설계를 특화 설계 점검표 애플리케이션 시스템을 위한 설계가 일반적인 아키텍처와 일치하는지..

[소프트웨어공학] 아키텍처 패턴의 종류 및 구조 [내부링크]

패턴과 아키텍처 패턴 패턴 소프트웨어 시스템에 대한 지식을 표현하고 공유하고 재사용하는 방법 객체지향 설계 패턴, 구조 설계를 위한 패턴, 사용성 패턴, 형상관리 패턴 등 아키텍처 패턴 서로 다른 시스템과 환경에서 시도되고 시험된 바람직한 사례를 양식화하고 추상화한 기술 설명 기술과 다이어그램을 섞어서 사용하는 표준 방법으로 기술 가능 패턴에 관련된 상세한 내용 포함 모델 뷰 제어기(MVC) 패턴의 구성 웹 기반 시스템에서 상호 작용 관리의 기반 대부분의 언어 프레임 워크에서 지원 예 : 런타임 시스템 아키텍처 아키텍처 설계의 기본 분리와 독립의 개념 변경에 의해 영향받는 범위를 작게 만듦 MVC 패턴 시스템의 요소들을 분리하여 독립적으로 변경될 수 있도록 함 계층 아키텍처 패턴 분리와 독립을 이루는 또..

[소프트웨어공학] 소프트웨어 시스템에서의 아키텍처 설계의 개념 및 사용 [내부링크]

아키텍처 설계 소프트웨어 설계 프로세스의 첫단계 시스템의 전체 설계를 이해하는 것 주요 구조 컴포넌트들과 그들 간의 관계 식별 설계와 요구공학 사이의 중요한 연결 결과물 → 아키텍처 모델 시스템이 상호작용하는 컴포넌트들의 집합으로 어떻게 구성되었는지 설명 애자일 프로세스 아키텍처 설계 초기 단계에서 전체 시스템 아키텍처 설계에 초점 맞춤 아키텍처의 점진적 개발은 보통 성공적이지 않음 변화에 대응하여 컴포넌트를 리팩토리항 하는 것이 상대적으로 쉬움 시스템 아키텍처를 리팩토링하는 것은 비용이 많이 듦 아키텍처 변화에 따라 시스템 컴포넌트들은 수정해야함 아키텍처 설계의 현실적 측면 주요 아키텍처 컴포넌트들이 시스템의 상위 수준 특징 반영 → 컴포넌트 식별 필요 이상적으로는 시스템 명세에는 설계 정보가 포함되지..

[Git] Git 내부 동작 원리 개념 정리 및 실습을 통한 이해 [내부링크]

CLI와 Git 내부의 폴더와 파일을 분석하여 Git 명령어들이 어떻게 동작하는지 살펴본다. Git init 내부 분석 Git Bash에서 임의의 빈 폴더에 git init을 통해 .git을 만든다.(로컬저장소 생성) ls -al .git 를 통해 .git 폴더 내부를 살펴보면 다양한 폴더들이 생성된 것을 확인할 수 있다. ls -al 명령의 각 컬럼의 의미 -rw-r--r-- 1 파일과 권한과 상태를 의미하는 것인데, Git 내부 명령을 이해하는데 중요한 것은 _맨 앞이 ‘-’로 시작하면 파일 ‘d’로 시작하면 폴더*_라는 것 junpyohong 파일 소유자의 아이디 staff 파일이 속한 그룹(파일 소유자가 속한 그룹) 73 파일의 크기, 바이트 표시로 표시 Dec 27 13:36 파일 생성 시간 d..

[Git] 자격증명 관리 방법(Mac OS)과 Git 에서의 SSH 키 생성 및 사용 [내부링크]

Mac 자격증명(Credential) 관리 계정 정보를 입력 및 삭제하는 방법 SourceTree에서 직접 입력하기 옵션 - 계정에서 사용자 계정 정보를 Remove로 삭제 CLI에서 git Push 명령어 사용 사용자 계정이 없는 상태에서 git push 로그인 정보 입력 후 자격 증면 관리자를 보면 GitHub 정보가 오늘 날짜로 자동으로 추가됨 Mac에서 Git 인증 관리 git config --local credential.helper git config --global credential.helper git config --system credential.helper기본적으로 맥에서 사용자 인증을 관리해 주는 osxkeychain이 git의 인증 관리에도 사용 키체인 접근 이라는 앱이나 소스트리..

[자료구조] 그래프 기초 개념과 및 BFS/DFS 분석하고 구현 [내부링크]

그래프 객체 간의 연결 관계를 표현하는 자료구조 → 매우 일반적인 자료구조 오일러 문제 모든 다리를 한 번만 건너서 처음 출발했던 장소로 돌아오는 문제 용어 표현 위치 → 정점(node) 다리 → 간선(edge) 오일러 정리 모든 정점에 연결된 간선의 수가 짝수이면 오일러 경로 존재 그래프 정의 수학적 표현 : \(G = (V, E)\) V는 정점(vertex)들의 집합 E는 간선(edge)들의 집합 정점들 간의 관계를 의미 → 정점들과 간선들의 각 유한집합의 자료구조 그래프의 종류 간선의 종류 무방향 간선 : 간선을 통해 양방향으로 갈 수 있음 (A, B) (A, B) = (B, A) 방향 간선 : 한쪽 방향으로만 갈 수 있음 \(\neq\) 그래프 종류 무방향 그래프 방향 그래프 가중치 그래프, 네트..

[자료구조] 우선순위 큐 - 힙(Heap)과 연결리스트로 이해,구현 그리고 응용 [내부링크]

우선순위 큐 우선순위를 가진 항목들을 저장하는 큐 우선순위큐 ADT 객체 n개의 element형의 우선 순위를 가진 요소들의 모임 연산 create() ::= 우선순위 큐를 생성 init(q) ::= 우선순위 큐 q를 초기화 is_empty(q) ::= 우선순 큐 q가 비어있는지를 검사 is_full(q) ::= 우선순위 큐 q가 가득 찼는가를 검사 insert(q,x) ::= 우선순위 큐 q에 요소 x를 추가 delete(q) : = 우선순위 큐 q로부터 가장 우선순위가 높은 요소를 삭제 및 반환 find(q) ::= 우선순위가 가장 높은 요소를 반환 우선 순위 큐는 2가지로 구분 최소값 우선수위 큐 작을수록 우선순위가 높음 최대값 우선순위 큐 높을수록 우선순위가 높음 우선순위 큐 구현방법 배열로 구현..

[네트워크 보안] IPSec 단계, 옵션 개념 및 분석 [내부링크]

IPSec VPN의 안전을 위해 사용되는 프로토콜 → IP버전6(IPv6) 필요 VPN : 양 끝단에 안전한 통로를 생성하는 응용체계 특징 암호화, 무결성, 보호 및 인증기능 제공 네트워크 계층에 존재하기 때문에 운영체제의 일부 IPSec을 구현하기 위해선 운영체제에 변화가 일어남 모든 작업이 OS(운영체제)에서 일어나기 때문에 응용프로그램의 변화X ← 가장 중요한 장점(응용프로그램에서 자유로움) IPSec은 2가지 주요한 부분으로 구성 IKE(Internet Key Exchange) 상호인증과 대칭키 공유를 설정해줌 SSL세션 및 접속과 유사하게 2가지 단계가 존재 보안 페이로드 캡슐화 및 인증 헤더(ESP/AH) AH는 무결성만 제공하는 반면 ESP는 암호화 및 IP 패킷의 무결성을 제공 결점 너무 ..

[네트워크 보안] SSL 개념 및 프로토콜 단계별 이해 [내부링크]

SSL 방대한 인터넷 상거래의 안전을 위해 사용되는 프로토콜 고객이 인터넷 서점에서 책을 구입하는 경우 신용카드를 제공하기 전 자신이 거래하고 있는 사이트가 진짜 그 사이트인지 확인 → 고객은 그 사이트를 인증 But, 인터넷 서점(사이트)쪽에서는 고객의 신원을 알 필요가 없다. 상호인증은 필요없다. 보편적으로 웹브라우징 세션에서 많이 사용 SSL 프로토콜 관련 용어 S = “마스터 이전 비밀”(Pre-master Secret) K = \(h(S,R_A,R_B)\) msgs = “모든 이전의 메시지”를 의미 CLNT = 문자열 SRVR = 문자열 SSL 프로토콜 너무 단순한 유사 SSL 프로토콜 과정 앨리스는 서버인 밥에게 안전한 거래를 원한다고 알림 밥은 자신의 인증서로 응답 인증서의 서명을 확인하여 ..

[네트워크 보안] 제로지식증명(ZKP)이란? ( +TCP 인증 프로토콜) [내부링크]

제로지식증명(ZKP) 정보를 노출하지 않고 증명하는것 앨리스가 밥에게 비밀번호를 알고 있다는 것을 증명하려고 한다. 밥에게 비밀번호를 말하지 않고 알고 있다는 것을 증명하는 것이 가능할까? 밥의 동굴(Bob’s Cave) 조건 길은 Q지점에서 두 갈래로 갈린다. R과 S 사이의 벽은 비밀번호를 알고 있다면 넘어갈 수 있다. Alice는 Bob에게 비밀번호를 알리지 않고 비밀번호를 알고 있다는 것을 어떻게 증명해야 하나? 과정 Bob이 보지않는 동안 Alice는 R과 S 중 하나의 길을 선택해서 들어간다. Bob은 Alice에게 R 또는 S 방향으로 나오라고 요구한다. Alice는 Bob이 요구한 방향으로 나온다. 해당 과정을 N번 반복 Alice가 비밀번호를 아는 경우 어느 방향으로 가든 벽을 넘을 수 ..

[네트워크 보안] 공개키 인증 프로토콜의 다양한 방식(세션키,PFS,타임스탬프) [내부링크]

공개키 \(C ={M}_{앨리스}\) → 메세지 M을 앨리스의 공개키로 암호화한 것 \(M =[C]_{앨리스}\) → 암호문 C를 복호화해 평문 M으로 만드는 것 \(S =[M]_{앨리스}\) → 앨리스의 개인키로 메세지를 서명한 것 공개키 연산은 누구나 수행할 수 있지만 개인키는 본인만 사용할 수 있다 암호화와 복호화가 상호 역연산인 것처럼 암호화와 서명 또한 역연산 관계 \(\begin{align} \left [ \left\{ M\right\}_{앨리스} \right ]_{앨리스} \\ \left\{ \left [ M \right ]_{앨리스}\right\}_{앨리스} \end{align}\) 공개키 인증 공개키 암호를 사용한 인증 앨리스만이 유일하게 3번째 메세지 R의 응답에 필요한 개인키 연산을 ..

[네트워크 보안] 단순 인증 , 대칭키 인증 프로토콜 그림과 함께 이해하기 [내부링크]

프로토콜 : 특정 상호 작용을 보장하기 위해 준수되어야 하는 규칙 네트워크 측면 : 연결된 다양한 통신시스템이 준수해야 하는 규칙 보안 프로토콜 : 보안 프로그램에서 준수되어야 하는 통신 규칙 보안 프로토콜이 중요한 이유 네트워크에 관한 공격은 프로토콜에 의해 전달되는 메시지에 의존한다. 네트워크에 관한 공격 : 통상 인증을 목적으로 네트워크를 통해 전송되는 메세지에 대한 보안 문제 대표적인 예 : 재연 공격, 중간자 공격 직접적인 사례 : IPSec, WEP, GSM 보안 프로토콜에서는 공격자가 매우 다양한 기법으로 중간 처리과정에 개입 → 다른 프로토콜보다 더 민감 보안 프로토콜이 정해진 보안 요구수준(효율성, 사용 용이성, 구현 용이성, 융통성) 등을 모두 만족시키기 힘듦 IFF(피아식별) 프로토콜..

[자료구조] 힙(Heap)의 개념과 구조, 그리고 힙을 통한 우선순위큐 구현(C) [내부링크]

우선순위 큐란? 우선순위를 가진 항목들을 저장하는 큐 우선순위큐 ADT 객체 n개의 element형의 우선 순위를 가진 요소들의 모임 연산 create() ::= 우선순위 큐를 생성 init(q) ::= 우선순위 큐 q를 초기화 is_empty(q) ::= 우선순 큐 q가 비어있는지를 검사 is_full(q) ::= 우선순위 큐 q가 가득 찼는가를 검사 insert(q,x) ::=** 우선순위 큐 q에 요소 x를 추가 delete(q) : = 우선순위 큐 q로부터 가장 우선순위가 높은 요소를 삭제 및 반환 find(q) ::= 우선순위가 가장 높은 요소를 반환 우선 순위 큐는 2가지로 구분 최소값 우선수위 큐 작을수록 우선순위가 높음 최대값 우선순위 큐 높을수록 우선순위가 높음 우선순위 큐 구현방법 배열..

[자료구조] 스레드 이진 트리 및 이진 탐색 트리 정리 및 구현 [내부링크]

스레드 이진트리 목적 : 이진트리의 NULL 링크를 이용하여 순환 호출 없이도 트리의 노드들을 순회 용어 중위 선행자 : 중위 순회 시에 선행 노드 중위 후속자 : 중위 순회 시에 후속 노드 스레드(thread) : 실을 이용하여 노드들을 순회 순서대로 연결시켜 놓은 것 장점 : 순회를 빠르게 할 수 있음 단점 : 스레드를 설정하기 위해 삽입이나 삭제 함수가 더 많은 일을 해야 함 구성 방법 NULL 링크에 중위 순회할 때 후속 노드(중위 후속자)를 저장시켜놓음 → 이를 스레드 이진트리라고 함 스레드 이진트리 순회 구현 #include #include #include typedef struct TreeNode{ int data; struct TreeNode *left, *right; // 오른쪽 자식 링..

[자료구조] 이진 트리 특징과 순회 방식 분석, 구현 및 활용 [내부링크]

이진 트리 정의 : 공집합 또는 루트와 왼쪽/오른쪽 서브트리로 구성된 유한집합(서브트리는 이진트리) 모든 노드가 2개의 서브트리를 가지고 있는 트리 서브트리는 공집할 수 있음 특징 각 노드에는 최대 2개까지의 자식 노드가 존재 각 노드의 차수 ≤ 2 → 구현하기가 편리 서브트리간 순서 존재 ( L → R ) 성질 노드의 개수가 n개이면 간선의 개수는 n-1개 높이가 h인 이진 트리인 경우 최소 h개의 노드 최대 \(2^h-1\)개의 노드 n개의 노드를 가지는 이진 트리의 높이 최대 n 최소 \(log_2(n+1)\)(올림) 이진 트리의 분류 포화 이진 트리 트리의 각 레벨에 노드가 꽉 차있는 이진 트리 완전 이진 트리 높이가 h일때, 레벨 1부터 h-1까지는 노드가 모두 채워져 있음 마지막 레벨 h는 왼..

[자료구조] 트리(Tree)의 기본 개념 및 종류, 그림으로 쉽게 알기 [내부링크]

트리 계층적인 구조를 나타내는 자료구조 부모 - 자식 관계의 노드들로 구성 트리 용어 노드(node) : 트리의 구성요소 간선(edge) : 노드를 연결하는 관계 루트(root) : 부모가 없는 노드(A) 단말 노드(terminal node) : 자식이 없는 노드( E,F,G,H,I,J ) 비 단말 노드(non-terminal node) : 적어도 하나의 자식을 가지고 있는 노드( A, B, C, D ) 서브 트리(subtree) : 하나의 노드와 그 노드들의 자손들로 이루어진 트리(점선) 자식/부모/형제/조상/자손 노드 : 인간과 동일함 레벨(level) : 트리의 각 층 번호 높이(height): 트리의 최대 레벨(3) 차수(degree) : 노드가 가지고 있는 자식 노드의 개수 트리의 종류 해당 트..

[자료구조] 연결리스트로 스택과 큐 구현하고 분석하기(C언어) [내부링크]

연결 리스트 스택 연결된 스택 구조 노드 = 데이터 필드 + 링크 필드 포인터 : top 연산 init, is_empty, is_full, push, pop 장점 크기가 제한되지 않는다. 단점 동적 메모리 할당이나 해제함 → 삽입이나 삭제 시간이 좀 더 걸림 연결 리스트 스택 연산 초기화 함수 top 포인터 값을 NULL로 한다. is_empty top 포인터 값이 NULL(true) → 공백(true) top 포인터 값이 false → 적어도 한 개의 노드가 있음 is_full 동적 메모리 할당받아 새 노드를 사용하므로 힙 공간의 크기만큼 사용 가능 → 많은 메모리 공간 사용 가능 → 포화상태 안됨(false) push(삽입연산) 먼저 동적 메모리 할당으로 새 노드를 만들고 데이터를 넣는다. temp ..

[자료구조] 원형리스트와 연결리스트 개념과 구조, 구현과 활용 [내부링크]

단순 연결 리스트 가장 첫 노드는 head를 가리킴 마지막 노드의 링크는 NULL로 표시 끝 노드를 찾는 시간 복잡도: O(n) 원형 연결 리스트 마지막 노드의 링크가 첫번째 노드를 가리킴 하나의 노드에서 링크를 따라가면 모든 노드 방문 가능 **모든 노드의 링크가 NULL이 아니다.(head가 NULL인 경우 제외)** 변형된 원형 연결 리스트 head 포인터 하나로 리스트의 처음과 끝을 가장 효율적으로 표현(찾는다) 마지막 노드 : head가 가리킴 첫번째 노드 : head → link가 가리킴 cf) 노드가 1개일 때 : head → link가 가리키는게 head 가장 처음에 노드 삽입하는 경우 원형 연결 리스트가 NULL(노드 0개)일 경우 head = node; head를 NULL에서 새로운 노..

[C++] 백준 12933 - 오리 [내부링크]

문제 이해 단계 문제 오리의 울음 소리는 "quack"이다. 올바른 오리의 울음 소리는 울음 소리를 한 번 또는 그 이상 연속해서 내는 것이다. 예를 들어, "quack", "quackquackquackquack", "quackquack"는 올바른 오리의 울음 소리이다. 영선이의 방에는 오리가 있는데, 문제를 너무 열심히 풀다가 몇 마리의 오리가 있는지 까먹었다. 갑자기 영선이의 방에 있는 오리가 울기 시작했고, 이 울음소리는 섞이기 시작했다. 영선이는 일단 울음소리를 녹음했고, 나중에 들어보면서 총 몇 마리의 오리가 있는지 구해보려고 한다. 녹음한 소리는 문자열로 나타낼 수 있는데, 한 문자는 한 오리가 낸 소리이다. 오리의 울음 소리는 연속될 필요는 없지만, 순서는 "quack"이어야 한다. "quq..

[Git] CLI 환경에서 reset, merge, rebase 사용하기 [내부링크]

CLI를 이용한 빨리 감기 병합 branch1 브랜치가 master 브랜치보다 최신 커밋을 가리키고 있다. 그리고 두 브랜치는 같은 작업의 흐름에 있다. master 브랜치로 checkout 후 master 브랜치와 branch1 브랜치를 merge(병합)하면? 새로운 커밋이 생성되지않고 master 브랜치가 빨리감기 된다. HEAD가 branch1 이고 main이 이전 커밋인 이런 커밋로그가 있다. main 브랜치로 체크아웃하고 커밋을 해보겠다. 중간에보면 Fast-forward라는 문구와 함께 branch1이 가리키던 커밋을 함께 가리키는 것을 확인할 수 있다. origin/HEAD는 변하지 않았는데 아직 원격저장소에 Push 해주지 않았기 때문이다. 빨리감기(fast-forward) 상황에서 reb..

[Git] 브랜치(Branch)와 체크아웃(Checkout) 사용 전략 및 CLI 명령어 정리 [내부링크]

브랜치 정의 : 논리적으로는 어떤 커밋과 그 조상들의 묶음 Actually, 단순히 커밋 객체 하나를 가리킴 커밋을 하면 커밋 객체가 생긴다. 커밋 객체 = 부모 커밋에 대한 참조 + 실제 커밋을 구성하는 파일 객체 브랜치 사용 시기 새로운 기능 추가 가장 대표적으로 브랜치를 사용하는 경우 master 브랜치는 보통 안정적인 버전의 프로젝트가 저장되어 있음 → 새로운 기능을 추가할때는 master 브랜치로부터 브랜치를 생성 버그 수정 버그 발생시 master 브랜치로부터 새로운 브랜치 생성 이때 브랜치 이름은 hotFix 또는 bugFix 사용 버그가 다 고쳐지면 master 브랜치에 병합 병합과 리베이스 테스트 병합이나 리베이스는 까다로운 작업 → 임시 브랜치를 만들어 여러 테스트 진행 이전 코드 개선..

[Git] CLI 기본 개념 및 기본 명령어 사용 정리 [내부링크]

GUI 환경 대신 굳이 CLI를 사용하는 이유? GUI 프로그램은 CLI 기능 중 자주 쓰는 기능만 모아서 쓰기 편리하게 만든 것 GUI는 Git의 모든 기능을 100% 사용 할 수 없다. → Git을 더욱 잘 활용하기 위해 CLI 환경에서 Git을 사용해야 한다. Git 용어 워킹트리(Working Tree) : 사용자가 파일과 하위 폴더를 만들과 작업 결과물을 저장하는 곳 작업 디렉토리, 작업 폴더가 같은 뜻으로 사용 커밋을 체크아웃하면 생성되는 파일과 디렉토리(공식문서) 작업 폴더에서 [.git]폴더(로컬저장소)를 뺀 나머지 부분 작업 폴더 : 워킹트리 + 로컬저장소 로컬 저장소 : [.git] 폴더** 커밋, 커밋을 구성하는 객체, 스테이지가 모두 이 폴더에 저장 원격 저장소 : 로컬 저장소를 업..

[Unity 3D] #8 SphereCastAll을 이용한 타격포인트 표시 및 낙뢰 구현 - Avoid Chess [내부링크]

이 글은 포스팅 #6 과 포스팅 #7과 연결된 마지막 포스팅이다. 광폭화패턴에서 플레이어를 실질적으로 공격하는 액션이다. 구현 목표 일정 시간마다 플레이어가 있는 곳에 낙뢰를 떨어뜨린다. 낙뢰를 떨어뜨리기 전에 그 포인트에 낙뢰의 범위만큼 빨간색으로 경고를 준다. 그리고 1초 후 그 포인트에 번개를 떨어뜨린다. 이러한 액션을 보스가 죽을 때까지 반복한다. 구현 과정 1. 낙뢰 이펙트 세팅 스크립트 작업에 들어가기 앞서 낙뢰처럼 보이기 위한 적절한 이펙트를 찾고 파티클 시스템을 설정해야한다. 해당 파티클이 적당해보인다. 근데 너무 재생시간이 짧아서 좀 더 길게 늘려줬다. Duration과 StartLifeTime을 2배로 늘려주면 재생시간만 두배로 늘어나게 된다. 색이 너무 연하거나 마음에 안드는 경우에는..

[Unity 3D] #7 Directional Light 컴포넌트를 활용한 화면 구현 - Avoid Chess [내부링크]

이번에 할 구현은 저번 #6에 이은 동작에 관한 구현이다. #6 포스팅은 간단하게 빨간볼을 크게 키운뒤 위로 쏘는 액션을 구현한 것이다. 자세한 것은 밑의 링크를 참고하길 바란다. https://howudong.tistory.com/109 [Unity 3D] #6 애니메이션 상태 체크를 활용한 보스 스킬 구현 - Avoid Chess 스크립트 상에서 현재 애니메이션 상태를 받아오는 방법으로 가장 대표적인 것은 Animator 컴포넌트의 GetCurrentAnimatorStateInfo를 이용하는 방법이다. 여기서 가장 많이 보편적으로 사용하는 함수를 howudong.tistory.com 구현 목표 #6 포스팅에서 만들어뒀던 빨간볼이 하늘로 쏴지면 하늘 전체가 먹구름으로 가득차듯이 날씨가 어두워지는 것을 ..

[Unity 3D] #6 애니메이션 상태 체크를 활용한 보스 스킬 구현 - Avoid Chess [내부링크]

스크립트 상에서 현재 애니메이션 상태를 받아오는 방법으로 가장 대표적인 것은 Animator 컴포넌트의 GetCurrentAnimatorStateInfo를 이용하는 방법이다. 여기서 가장 많이 보편적으로 사용하는 함수를 설명하겠다. Animator.GetCurrentAnimatorStateInfo(0) 현재 재생중인 애니메이션을 의미 Animator.GetCurrentAnimatorStateInfo(0).IsName(String) 현재 재생중인 애니메이션이 String인가? (맞으면 true 아니면 false) Animator.GetCurrentAnimatorStateInfo(0).normalizedTime 현재 재생중인 애니메이션의 진행 정도를 의미한다. (1이면 해당 애니메이션의 재생이 끝났다는 의미..

[C++] 백준 18427 - 함께 블록 쌓기 [내부링크]

문제 이해 단계 문제 1번부터 N번까지의 학생들은 각각 블록들을 가지고 있다. 학생마다 최대 M개의 블록을 가지고 있을 수 있으며, 한 명의 학생이 가지고 있는 모든 블록들의 높이는 서로 다르다. 이 때 1번부터 N번까지의 학생들이 가진 블록을 차례대로 사용하여 바닥에서부터 쌓아올려 하나의 탑을 만들고자 한다. 단, 어떤 학생의 블록은 사용하지 않아도 되며 한 학생당 최대 1개의 블록만을 사용할 수 있다. 1번부터 N번까지의 학생들이 가지고 있는 블록들에 대한 정보가 주어졌을 때, 높이가 정확히 H인 탑을 만들 수 있는 경우의 수를 계산하는 프로그램을 작성하시오. 예를 들어 N=3, M=3, H=5일 때, 각 학생마다 가지고 있는 블록들의 높이가 다음과 같다고 가정하자. 1번 학생: 2, 3, 5 2번 ..

[Git] SourceTree로 알아보는 Reset,Revert 그리고 Stash 개념 [내부링크]

Reset(되돌리기) 현재 브랜치의 최신 상태를 이전 커밋(원하는 커밋)으로 되돌리는 기능 3가지 모드 존재 Hard : 모든 작업 내 변경 사항을 버린다.(변경 사항을 다 삭제) Mixed : 원하는 커밋으로 되돌아가지만, 변경사항은 스테이지 아래에 둠 Soft : 원하는 커밋으로 되돌아가지만, 변경사항은 스테이지 위에 둠 Sourcetree Hard Reset 실습 add featB 커밋으로 되돌리기 위해 Reset 버튼을 클릭 3가지 모드 중 Hard 선택 로컬저장소는 적용됐지만 원격저장소 origin에는 아직 적용되지 않음 히스토리를 수정하는 작업이기 때문에 강제푸시를 사용해야한다. 따라서 ForcePush를 체크한다. 정상적으로 원격저장소인 origin에도 적용된 것을 확인할 수 있다. Reve..

배낭 문제(KnapSack Problem) 그림으로 쉽게 이해하기 [내부링크]

배낭 알고리즘이란? 배낭 문제(Knapsack)는 n개의 물건과 배낭 있을 때, 각 물건에는 가치와 무게가 존재한다. 또한 각 물건은 1개씩만 있다. 배낭에는 담을 수 있는 최대 용량이 존재한다. 이러한 조건일 때, 배낭의 최대 용량을 초과하지 않으면서 배낭에 담을 수 있는 최대 가치의 합을 찾는 문제이다. 해당 그림은 배낭 문제의 예시이다. 지금부터 알고리즘을 설명할 때 해당 예시를 가지고 계속 설명하겠다. 0-1 KnapSack Problem 배낭 문제는 물건을 쪼갤 수 있는 Fraction Knaspack Problem과 물건을 쪼갤 수 없는 0-1 knapSack Problem으로 나뉜다. 이 글에서 설명하고자 하는 것은 0-1 KanpSack Problem이다. 대표적인 DP(Dynamic Pr..

[C++] 백준 14719 - 빗물 [내부링크]

문제 이해 단계 문제 2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다. 비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까? 입력 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치부터 차례대로 W개 주어진다. 따라서 블록 내부의 빈 공간이 생길 수 없다. 또 2차원 세계의 바닥은 항상 막혀있다고 가정하여도 좋다. 출력 2차원 세계에서는 한 칸의 용량은 1이다. 고이는 빗물의 총량을 출력하여라. 빗물이 전혀 고이지 않을 경우 0을 출력하여라. 예제 입력 1 4 4 3 0 1 4 예제 출력 1 5 예제 입력 2 4 8 3..

[C++] 백준 15724 - 주지수 [내부링크]

문제 이해 단계 문제 네모 왕국의 왕인 진경대왕은 왕국의 영토를 편하게 통치하기 위해서 1X1의 단위 구역을 여러 개 묶어서 하나의 거대 행정구역인 주지수(州地數, 마을의 땅을 셈)를 만들 예정이다. 진경대왕은 주지수를 만들기 위해서 일정한 직사각형 범위 내에 살고 있는 사람 수를 참고 자료로 쓰고 싶어한다. 진경대왕은 굉장히 근엄한 왕이기 때문에 당신에게 4개의 숫자로 직사각형 범위를 알려줄 것이다. 예를 들어, 위와 같이 사람이 살고 있다고 가정할 때 의 직사각형 범위의 사람 수를 알고 싶다면 진경대왕은 네 개의 정수 1 1 3 2를 부를 것이다. 마찬가지로 는 1 1 1 4, 은 1 1 4 4가 될 것이다. 진경대왕을 위하여 이 참고 자료를 만들어내는 프로그램을 작성해보자. 입력 첫째 줄에 영토의 ..

[Git] Amend 와 Cherry-Pick 이해하고 SourceTree에서 사용해보기(MAC OS) [내부링크]

Amend 가장 최근에 올린 커밋을 수정하는 명령어 로컬 저장소까지만 Push했을때와 원격저장소까지 Push했을때까지 방법이 다름 SourceTree 로컬 저장소까지만 Push 했을때 README.md에 “8.어멘드 추가”라는 텍스트를 추가해서 커밋메세지 없이 로컬저장소까지 커밋했다. 이를 다시 새로운 커밋로그를 만들지 않고 “8.어멘드 추가”를 “8.add amend”로 바꾸고 커밋 메세지에 “어멘드 추가”를 넣고 싶다. 이때 amend를 사용할 수 있다. 방법은 간단하다. 일반적인 커밋과 마찬가지로 README.md에서 텍스트를 수정해준 뒤 커밋메세지를 추가해준다. 이후 커밋 이전에 Commit Options에 Amend last Commit을 눌러준다. 그러면 확인 문구가 뜨는데 확인을 누르면 커밋..

[Unity 3D] #5 오브젝트 중심 원형 배치 및 회피성 타겟 추적 시스템 구현 - Avoid Chess [내부링크]

구현 목표 원형으로 보스 위에 몇개의 매직볼이 생긴다. 이 매직 볼은 두 가지 종류가 있는데 파란색과 빨간색이다. 파란색 -> 느리지만 플레이어를 추적 빨간색 -> 빠르지만 플레이어 방향으로 일직선 공격 이를 구현해보자 구현 과정 1. Magic Ball 오브젝트 설정 2가지 MagicBall에 어울릴만한 오브젝트를 선별했다. 일단 크기를 조절하기 위해서 Scene에서 크기를 확인해봤다. 너무 크다. 그래서 Scale을 줄이고자 한다. 그런데 Scale을 아무리 건드려도 줄어들지 않을 것이다. 왜냐하면 해당 오브젝트는 파티클 시스템이기 때문에 다른 설정을 해줘야한다. 이펙트에 파티클 시스템 컴포넌트를 보면 안에 Scaling Mode가 있다. 여기서 Hierarchy로 바꿔주고 스케일을 다시 조정해주면 ..

[Git] 소스트리(SourceTree) 포크(Fork) 및 원본 저장소와 연동하기 [내부링크]

Fork의 개념 원본저장소를 fork(복제)한다는 것은 독립된 원격저장소를 만든다는 의미 fork한 시점 이후의 원본 저장소의 히스토리는 알 수 없다. 원격저장소에서 원본저장소의 히스토리를 함께 보고싶다면? → 리모트 추가(Add remote) SourceTree Fork 및 리모트 추가 방법 1. Fork 원하는 저장소로 가서 Fork 버튼 클릭 저장소 이름과 여러가지 설정들이 있는데 Copy the main branch only를 선택하면 main 브랜치만 fork해온다. Create fork를 누르면 아래와 같이 개인 저장소로 가져와진다. 이렇게하고 code를 누르면 주소가 뜨는데 이걸 복사해서 Source Tree로 돌아간다. SourceTree에서 원격 → URL에서 복제 클릭 아까 복사했뒀던 ..

[Git] Branch(브랜치) vs Fork(포크) (with. Pull Request) [내부링크]

Pull Request(풀 리퀘스트)로 보는 차이 Pull Request? 원본 저장소에 병합을 요청하는 것(권한이 없어도 가능) base:master : 병합된 커밋이 들어갈 브랜치를 정하는 선택박스 compare:JP-test : 병합의 대상, 즉 base 브랜치에 반영시키고 싶은 브랜치 Able to merge : 두 브랜치가 충돌 없이 병합될 수 있다는 뜻. 만약 충돌이 나면 빨간색으로 Conflict 표시 풀 리퀘스트 제목 : 동료 개발자가 한 눈에 이해하기 쉬운 제목을 적어야함 풀 리퀘스트 내용 : 동료 개발자가 코드를 이해하는데 도움이 되는 설명, 스크린샷 첨부 및 테스트 방법 서술 Reviewers: 저장소에 협력자가 여러명이라면 해당 요청을 받는 사람을 지정 가능. 보통 기능 연관자 지정..

[Git] 병합(Merge)과 충돌(Conflict) 개념 및 소스트리 충돌해결 [내부링크]

Git 병합(merge) 개념 및 차이 소스트리 충돌 해결 병합(merge) : 두 버전의 합집합을 구하는 것 병합 커밋(Merge Commit) 새로운 상태가 나오므로 새로운 커밋이 생긴다. 빨리 감기(Fast-forward) 합친 결과물이 뒤에 있는 커밋과 같다. → 새로 상태를 만들어줄 필요가 없음 충돌(Conflict) 같은 구간에 다른 커밋이 발생했을 경우 충돌 발생 두 병합의 차이 및 충돌 발생 초기 상태가 아래와 같이 존재할 때 이를 이용하여 두 병합의 차이를 알아보자. 1. Master 브랜치와 A 브랜치 합치기 새로운 커밋이 생성되지 않고 A 브랜치와 master 브랜치가 동시에 커밋5를 가리킴 → 빨리 감기(Fast-forward) 둘 다 커밋5를 가리키고 있으면 A 브랜치를 삭제해도 ..

[Git] 브랜치 개념 및 원리 [내부링크]

브랜치 : 특정 기준에서 줄기를 나누어 작업할 수 있는 기능 브랜치 이동 원리 master / 포인터(Pointer) / HEAD 꼬리표 이해 master : Git에서 제공하는 기본적인 브랜치 첫번째 커밋을 하면 자동으로 ‘master’ 라는 이름의 브랜치가 커밋을 가리킴(Point) Pointer : 물리적인 길이 아닌 그저 가리키는 것 새로 커밋을 할 때마다 브랜치의 포인터가 최신 커밋을 가리킴 물리적인 것이 아니기 때문에 커밋을 가리키는 것만으로도 분기를 만들 수 있음 프로젝트를 통째로 복사할 필요 없음 → Git은 가볍고 빠름 HEAD : 브랜치 혹은 커밋을 가리키는 특수한 포인터 해당 브랜치 상태로 이동할 수 있음 → 타임머신 같은 역할

[Git] Git 파일 버전 관리 원리 [내부링크]

add : 하나의 버전을 만들기 위해 변경사항을 선택하는 과정 commit : 선택한 변경사항을 하나로 묶어 버전으로 만든 것 변경사항만 부분적으로 저장하는 것이 아닌 변경된 파일 전체를 저장 → Snapshot Snapshot vs Delta Delta : 바뀐 내용만을 저장 SVN(SubVersion)에서 사용하던 방식 Snapshot : 바뀐 내용뿐만 아니라 전체 코드 저장 Git이 대중화된 이유 → 더 빠르기 때문 why? 버전을 보여줄 때의 차이점 때문 Delta 방식 : 파일이 만들어졌던 맨 처음까지 거슬러 올라가며 바뀐 점을 모두 반영하는 계산을 해야함 SnapShot 방식 : 이미 전체 파일이 저장되어 있기 때문에 앞 커밋과 비교하는 연산 한번만 하면 됨 Git으로 관리하는 파일의 4가지 ..

[유니티 3D] #4 텔레포트 구현 및 애니메이팅 - Avoid Chess Project [내부링크]

구현 목표 비숍 보스에 텔레포트 패턴을 추가하려고 한다. 텔레포트 패턴은 뿅하고 사라진 후 플레이어의 머리 위에서 나타나는 패턴이다. 구현을 2가지 항목으로 세분화 하였다. 1. 텔레포트 액션 애니메이팅 보스의 텔레포트 애니메이션을 제작하고, 이펙트를 추가하여 이동할 때 텔레포트 하는 느낌이 나도록 할 것이다. 2. 텔레포트 스크립트 구현 만든 애니메이션을 토대로 코드를 작성하여 실제로 보스에게 패턴을 적용시킨다. 구현 과정 1. 텔레포트 애니메이션 만들기 우선 Bishop 프리팹을 이동해서 Create New Clip으로 Bishop_Teleport라는 이름으로 새로운 애니메이션을 만들어준다. 간단하게 스케일 조정으로 텔레포트 효과를 만들었다. Animation에서 녹화버튼을 누르고 원하는 시간대에 모..

Git 원격저장소(Repository) 생성 입력(옵션) 항목 정리 [내부링크]

1. Repository name : 저장소 이름(필수) 작업할 프로그램의 이름을 입력 이름에 따라 URL이 결정됨 2. Description : 저장소 간단 설명 저장소 이름에 대한 간단 설명 3. Public / Private : 공개 / 비공개 설정(필수) Public : 저장소를 공개해서 누구나 코드를 볼 수 있게 함 Private : 등록된 사람만 볼 수 있도록 함. 비공개 저장소는 3인 이하일때만 무료 4. Initialize with a README : README로 첫 내용 설정 빈 저장소가 아닌 README.md 파일이 담김 저장소가 생성됨 [README.md 저장소든 폴더든 코드로 공간을 만들 때에 그 설명을 기록하는 곳 보통 저장소에 대한 설명,설치 방법, 저장소에 기여한 사람 등 다..

[C++] 백준 2138 - 전구와 스위치 [내부링크]

문제 이해 단계 문제 N개의 스위치와 N개의 전구가 있다. 각각의 전구는 켜져 있는 상태와 꺼져 있는 상태 중 하나의 상태를 가진다. i(1 < i < N)번 스위치를 누르면 i-1, i, i+1의 세 개의 전구의 상태가 바뀐다. 즉, 꺼져 있는 전구는 켜지고, 켜져 있는 전구는 꺼지게 된다. 1번 스위치를 눌렀을 경우에는 1, 2번 전구의 상태가 바뀌고, N번 스위치를 눌렀을 경우에는 N-1, N번 전구의 상태가 바뀐다. N개의 전구들의 현재 상태와 우리가 만들고자 하는 상태가 주어졌을 때, 그 상태를 만들기 위해 스위치를 최소 몇 번 누르면 되는지 알아내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 전구들의 현재 상태를 나타내는 숫자 N개..

[네트워크 보안] 블록 암호 및 운용방식(ECB,CBC,CTR) 정리 [내부링크]

블록암호란? - 기밀성 있는 정보를 고정된 크기의 블록단위로 구성하여 암호화 작업을 하는 대칭키 암호 시스템 - 운용 방식에는 크게 ECB, CBC, CTR 세가지 운용 방식이 있다. ECB(Electronic Code Book) 암호화 작업을 하려는 메세지를 여러 블록에 나누어 순차적으로 각각 암호화 하는 방식(가장 간단한 구조) 모든 블록이 같은 암호화 키 사용 → 한 블록만 해석되면 나머지 블록도 해석 → 보안에 취약(대표적인 공격 : 복사/붙여넣기) 각 블록이 독립적으로 동작 → 한 블록의 에러가 다른 블록에 영향x 복호화 후 평문을 알기 위해선 Padding 필요 ← 암호문이 블록의 배수가 되기 때문 CBC(Cipher Block Chain) 평문의 각 블록은 XOR 연산을 통해 이전 암호문과 ..

[네트워크 보안] DES3 개념 및 암/복호화 구현(Python) [내부링크]

DES3의 개념 - DES의 단점인 키 길이가 충분하지 않다는 점을 보완하기 위해 나온 모델 - 3개의 DES키를 이용한다는 의미 3DES는 DES의 단점을 발전형이기 때문에 해당 글에서는 DES를 알고 있다는 가정 하에 설명하고 있다. 그리고 코드 또한 DES에서 구현했던 것과 똑같이 사용하기 때문에 부연설명을 하진 않았다. 그러므로 아래 링크로 들어가서 DES에 관해 먼저 안 뒤에 이 글을 읽기 바란다. https://howudong.tistory.com/90 [네트워크 보안] DES 개념 및 암/복호화 구현(Python) DES의 개념 - 64bit 평문을 64bit 암호문으로 암호화 하는 대표적인 비밀키 방식의 대칭 암호 알고리즘 - 암호화/복호화 할때 쓰는 비밀키가 동일함 DES 암호화 방식 평..

[네트워크 보안] DES 개념 및 암/복호화 구현(Python) [내부링크]

DES의 개념 - 64bit 평문을 64bit 암호문으로 암호화 하는 대표적인 비밀키 방식의 대칭 암호 알고리즘 - 암호화/복호화 할때 쓰는 비밀키가 동일함 DES 암호화 방식 평문을 64비트로 나눠 56비트의 키로 다시 64비트의 암호문을 만들어내는 알고리즘 DES는 Feistel Cipher 방식으로 암호화를 한다. Feistel Cipher 방식이란 데이터를 좌 우로 나누어 교대로 비선형 변환을 적용하는 구조이다. 장점으로는 누군가 키를 알아내도 원래의 함수를 알아내지 못해 보안성이 좋다. 구현 DES.py from Crypto.Cipher import DES from Crypto.Hash import SHA256 as SHA class myDES(): # DES 초기화 def __init__(se..

[네트워크 보안] RSA 개념 및 암/복호화 구현 [내부링크]

RSA의 개념 - 공개키 암호 시스템의 하나로, 공개키와 비밀키 두가지의 키를 사용한다. - 전자서명 기능을 요구하는 전자 상거래 등 광범위하게 사용됨 RSA 암호화 방식 공개키 : 모두에게 알려져있으며 암호화하는데 사용 비밀키 : 단 한 사람만 가지고 있고 해독할때 사용 -> 누구나 메세지를 암호화 할 수 있지만 해독할 수 있는 사람은 개인키를 지닌 사람뿐 구현 import socketserver from os.path import exists from Crypto import Random from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 import base64 HOST = '' PORT = 3333 # 들어오는 요청을 처리하..

[자료구조] 덱 응용 : Work-Steal(A-steal) 알고리즘 구현 [내부링크]

구현 사항 - 각 프로세서들이 각자의 queue를 가지고 작업을 수행 -queue 안에는 순차적으로 실행되어야 하는 Job이 존재 - 동시에 모든 큐를 진행해서 Job을 하나씩 처리한다. - 자신의 큐가 비어있으면 다른 큐에서 Job을 뺏어 처리한다. 구현 방식 큐라고는 하지만 처리하는 일은 앞에서 하고 뺏길 때 뺏기는 큐에서는 뒤에서 뺏기기 때문에 앞과 뒤에서 둘다 요소를 뺄 수 있는 덱을 이용해야 한다. 덱을 이용해서 큐잉 모델 형식으로 구현을 하면 된다고 생각하고 구현하였다. 구현 #include #include #define MAX_DEQUE 100 int total = 0; typedef struct{ char* data[MAX_DEQUE]; int front,rear; }Deque; void ..

[자료구조] 배열리스트(ArrayList), 단순 연결리스트(LinkedList) 구현 [내부링크]

리스트 리스트의 항목들은 순서 또는 위치를 가진다. cf) 집합 : 각 항목간에 순서의 개념x ADT 객체 : n개의 element형으로 구성된 순서 있는 모임 연산: insert(list, pos, item) ::= pos 위치에 요소를 추가 insert_last(list, item) ::= 맨 끝에 요소를 추가 insert_first(list item) ::= 맨 처음에 요소를 추가 delete(list, pos) ::= pos 위치의 요소를 제거 clear(list) ::= 리스트의 모든 요소 제거 get_entry(list, pos) ::= pos 위치의 요소를 반환 get_length(list) ::= 리스트의 길이를 구한다. is_empty(list) ::= 리스트가 비었는지 검사 is_ful..

[자료구조] 큐(Queue)와 덱(Deque) [내부링크]

큐 FIFO(First In First Out) : 먼저 들어온 데이터가 먼저 나가는 자료구조 동작 삽입(enqueue) : 큐의 후단(rear) 삭제(dequeue) : 큐의 전단(front) ADT 객체 : 0 개 이상의 요소들로 구성된 선형 리스트 연산 create(max_size) ::= 최대 크기가 max_size인 공백큐로 생성한다. init() ::= 큐를 초기화한다. is_empty() ::= 큐가 비어있는지 검사한다. is_full() ::= 큐가 가득 찼는가를 검사한다. enqueue(e) ::= 큐의 뒤에 요소를 추가한다 dequeue() ::= 큐의 앞에 있는 요소를 반환한 다음 삭제한다. peek() ::= 큐에서 삭제하지 않고 앞에 있는 요소를 반환한다. 큐의 활용 은행에서의 대..

[자료구조] 스택 개념 및 응용 [내부링크]

스택 특징 Last in First Out(LIFO) → 가장 최근에 들어온 데이터가 가장 먼저 나감 입력의 역순 출력이 필요한 이유 에디터에서 되돌리기 기능 함수호출에서 복귀주소 기능 ADT 객체 : 0개 이상의 원소를 가지는 유한 리스트 연산 : create(size) ::= 최대 크기가 size인 빈 스택을 생성 is_empty(s) ::= 스택 s가 비어있는지를 검사 is_full(s) ::= 스택 s가 가득 찼는가를 검사 push(s,x) ::= 스택 s의 맨 위에 요소 x를 추가 pop(s) ::= 스택 s의 맨 위에 있는 요소를 삭제 peek(s) ::= 스택 s의 맨 위에 있는 요소를 삭제하지 않고 반환 구현 배열을 이용한 스택 1차원 배열 stack[MAX_STACK_SIZE] 사용 스택..

[자료구조] 배열,구조체,포인터 관계 및 정리 [내부링크]

배열 쌍의 집합 각 항목의 값은 인덱스 번호로 위치가 계산되어 참조 ****직접 접근 방식, 접근 시간 복잡도 : O(1)**** ADT 객체 : < Index, element> 쌍의 집합 연산 create(size) ::= size개의 요소를 저장할 수 있는 배열 생성 get(A,i) ::= 배열 A의 i번째 요소 반혼 set(A,i,v) ::= 배열 A의 i번째 위치에 값 v 저장 1차원 배열의 주소 가장 첫번째 인덱스 **base** 인덱스를 n이라고 했을 때 arr[n] = **base + nsizeof(자료형)***** ex) int A[6] A[0] : base A[2] : base + 2*sizeof(int) 2차원 배열의 주소 현재 사용하는 것은 행우선 배열(row-major order a..

[자료구조] 재귀함수(순환구조) [내부링크]

순환 개념 알고리즘이나 함수가 수행 도중에 자기 자신을 다시 호출하여 문제를 해결하는 기법 정의 자체가 순환적으로 되어 있는 경우 적합 프로그램에서 되풀이 해결방법 순환(recursion) 순환적인 문제에서는 자연스러움 **********함수 호출에 오버헤드 발생 가능성********** 반복(iteration) 수행속도가 빠름 ********순환적인 문제에 관해서는 프로그램 작성이 어려워질수도 있음******** 팩토리얼 순환(Recursive) 구현 int factorial_recur(int x) { if(x == 1) return 1; // 순환 비호출 부분 return x*factorial_recur(x-1); // 순환 호출 부분 } 반복(Iter) 방식 구현 int factorial_iter(..

[자료구조] 알고리즘 성능 분석 기법 [내부링크]

성능 분석 기법 수행 시간 측정 - 두 개의 알고리즘의 실제 수행 시간을 측정하고 비교 가정 : 동일한 하드웨어 사용 복잡도 분석 공간 복잡도 : 수행 시 필요로 하는 메모리 공간 분석 시간 복잡도 분석 : 직접 구현하지 않고 수행 시간 분석 ← 수행하는 연산의 횟수를 측정하여 비교 수행시간 측정 - clock 함수 #include #include #include int main(){ clock_t start,end; double duration = 0; start = clock(); // clock() 현재 시간을 반환 // 코드 실행 // ... // 코드 종료 end = clock(); duration = (double)(end-start)/CLOCKS_PER_SEC; // 초 단위 환산 print..

[자료구조] 자료구조 및 추상화 개념 [내부링크]

자료구조와 알고리즘 자료구조 : 컴퓨터에서 자료를 정리하고 조직화하는 다양한 구조 알고리즘 : 컴퓨터에서 문제를 해결하기 위한 절차적 단계 프로그램 = 자료구조 + 알고리즘 알고리즘의 조건 입력(Input) : 0개 이상의 입력이 존재해야 한다. 출력(Output) : 1개 이상의 출력이 존재해야 한다. 명백성(Definiteness) : 각 명령어의 의미는 모호하지 않고 명확해야 한다. 유한성(Finiteness) : 한정된 수의 단계 후에는 반드시 종료되어야 한다. 유효성(Effectiveness) : 각 명령어들은 실행 가능한 연산이어야 한다. 알고리즘 기술 방법 자연어 장점 : 읽기 쉽다. 단점 : 의미 전달이 모호하다. 흐름도(flow chart) 장점 : 직관적이고 이해하기 쉽다 단점 : 알고..

[소프트웨어공학] 동작 모델과 모델 주도 아키텍처 [내부링크]

동작 모델 시스템이 실행될 때의 동적 행동에 대한 모델 시스템이 환경 자극에 반응할 때, 무엇이 일어나는지 또는 일어나도록 의도했는지 보여줌 자극의 종류 데이터 : 시스템이 처리해야 하는 데이터가 도착 이벤트 : 시스템 처리를 활성화하는 이벤트가 발생 시스템 동작 방식 데이터 처리 시스템 시스템에서 보낸 데이터를 처리(예 : 전화 과금 시스템) 실시간 시스템 이벤트가 시스템을 작동, 이벤트와 연관된 데이터가 있을 수 있음(필수X)(예: 유선전화기) 데이터 주도 모델링 데이터 주도 모델 입력 데이터 처리와, 입력 처리와 연관된 출력 생성과 관련된 일련의 행동 (= 처음부터 끝까지 시스템의 처리 사항을 보여줌) 요구사항 분석 중에 사용될 수 있음 처음으로 사용된 그래픽 소프트웨어 모델 데이터 흐름 모델 특정..

[소프트웨어공학] 시스템 모델링 개념과 UML 다이어그램 유형 5가지 [내부링크]

시스템 모델링 시스템의 추상 모델을 개발하는 프로세스 각 모델은 시스템의 서로 다른 뷰나 관점을 나타냄 UML 다이어그램 유형 기반 그래픽 표기법으로 나타냄 모델의 단계별 사용 요구공학 프로세스 : 시스템의 상세 요구사항을 이끌어내기 위해 사용 설계 프로세스 : 엔지니어들에게 시스템을 설명하기 위해 사용 구현 후 : 시스템의 구조와 동작을 문서화하기 위해 사용 기존 및 새 시스템의 모델 개발 요구공학 중에 사용됨 기존 시스템의 모델 기존 시스템이 무엇을 하는지 알려줌 이해당사자간 논의를 강점과 약점에 집중하는데 사용 새 시스템의 모델 제안된 요구사항들을 다른 시스템 이해당사자들에게 설명하는데 사용 엔지니어들은 이 모델들을 설계를 논의하고 시스템을 문서화하는데 사용 시스템 모델 검토 중인 시스템의 추상화(..

[소프트웨어공학] 요구사항 검증/변경/관리 [내부링크]

요구사항 검증 고객이 정말 원하는 시스템인가?를 점검 도출 및 분석과정과 겹침 요구사항에서 문제점을 찾는 것과 관련 요구사항 검증은 매우 중요한 과정 이후 단계에서 요구사항 문서상 오류가 발견될 경우 막대한 재작업 비용 필요 ← 주로 개발 중이나 서비스 시작 후에 문제점이 발견되기 때문 시스템 변경을 통해 요구사항 문제를 수정할 경우 높은 비용 발생 ← 시스템 설계와 구현 변경, 테스트 다시 수행 → 설계나 코드 오류보다 훨씬 높은 비용 요구사항 검증시 점검해야 하는 사항들 유효성 점검 요구사항이 시스템 사용자의 실제 요구를 반영하는가? 일관성 점검 문서상의 요구 사항이 서로 상충되지 않는지 확인 → 모순되는 제약이나 같은 기능에 대한 다른 설명이 없는지 확인 완전성 점검 의도한 모든 기능과 제약이 정의..

[소프트웨어공학] 요구공학에서의 요구사항 명세 분석 [내부링크]

요구사항 명세 — 사용자 요구사항 및 시스템 요구사항을 문서로 작성하는 과정 이상적인 요구사항 작성 조건 대상 : 사용자 요구사항과 시스템 요구사항 모두 특징 : 명확하고, 모호하지 않으며, 이해하기 쉽고, 완전하고, 일관성 있어야 함 실제로 달성 어려움 ← 충돌이나 불일치 자주 발생 ← 이해당사자들간의 다른 해석 사용자 요구사항 작성 단순한 표,양식, 직관적 다이어그램을 가지고 자연어로 작성 기술적 지식이 없는 시스템 사용자가 이해할수 있도록 기능적/비기능적 요구사항을 포함 시스템의 외부 동작에 대해서만 명세 시스템 이케텍처나 설계에 대한 상세한 내용X 시스템 요구사항 작성 사용자 요구사항에 상세한 내용 추가 시스템의 외부 동작과 운영상의 제약에 대해서만 기술 시스템의 설계와 구현에 대해서는 다뤄선 안..

[소프트웨어공학] 요구사항 도출 및 분석 프로세스 [내부링크]

요구사항 도출 이해당사자들의 업무 지원을 위해 신규 시스템을 활용하는 방식을 이해하는 것 요구사항을 알아내기 위해 소프트웨어 엔지니어는 이해당사자들과 함께 일함 예 ) 응용 도메인, 업무 활동, 이해당사자들이 원하는 시스템 기능, 필요한 기능, 하드웨어 제약 등 요구사항 도출이 어려운 이유 애매하고 비현실적인 요구사항 아주 일반적인 용어로만 표현 타당하고 그른것을 잘 모름 도메인 경험이 전제된 상태에서의 요구사항 요구사항을 전문용어를 사용해서 표현 → 경험 없는 요구사항 엔지니어는 이해못함 여러 명의 이해당사자들의 서로 다른 요구사항 → 요구사항 엔지니어는 요구사항에 대한 모든 잠재적 출처를 찾고 공통점과 상충점을 찾아내야함 정치적 요소가 시스템 요구사항에 영향을 줄 수 있음 권력을 얻기 위해 관리자에게..

[소프트웨어공학] 요구공학 프로세스/스토리와 시나리오 [내부링크]

요구공학 프로세스 요구공학 프로세스에 대한 나선형 뷰 관련 활동들이 나선 형태의 반복 프로세스들로 구성 각 활동에 소요한 시간과 노력의 양은 특성에 따라 달라짐 요구사항 도출 및 분석 시스템 요구사항을 얻어내는 프로세스 기존 시스템 관찰, 업무 분석, 잠재적 사용 자 및 구매자와 토의 하나 이상의 시스템 모델과 프로토타입을 만들기도 함 → 명세할 시스템 이해에 도움 요구사항 명세화 요구사항을 담은 문서 작성 두 가지 유형의 요구사항이 포함될 수 있음 사용자 요구사항 : 시스템 요구사항에 대한 추상적인 문장들(고객과 시스템 최종 사용자용) 시스템 요구사항 : 제공할 기능에 대한 상세한 설명 포함 요구사항 검증 요구사항에 대한 현실성,일관성,완전성을 검사 요구사항 문서상의 오류를 발견하고 수정하여 문제를 바..

[소프트웨어공학] 요구공학과 요구사항 분석 [내부링크]

요구사항과 요구공학 요구사항 한 시스템이 제공해야하는 서비스들과 그 서비들의 동작에 관한 제약을 기술한 것 특정 목적을 제공하는 시스템에 대한 고객의 요구 반영 요구사항이라는 용어를 일관성있게 사용하진 않음 사용자 요구사항 : 단순 시스템이 제공해야 하는 서비스에 대한 추상적 서술 및 시스템 제약사항 시스템 요구사항 : 시스템 기능에 대한 상세하고 정형화된 정의 요구사항 용어 정의 차이가 발생하는 이유 한 회사가 소프트웨어 개발 프로젝트에 대한 계약을 허용하려고 한다. 계약을 위해선 요구사항을 작성해야만 비용을 협상하고, 솔루션을 제공해 줄 수 있다. 그렇기 때문에 회사측에서는 요구사항을 작성해야만 한다. 그런데 회사측에서는 아직 사전 정의된(구체적인) 요구들이 없기 때문에 회사에서는 매우 추상적인 방식..

[소프트웨어공학] 애자일 기법 이슈와 해결방안 [내부링크]

대규모 시스템에 애자일 접근법 사용 대규모 시스템은 개발에 오랜 시간이 걸려서 몇 가지 문제점이 발생 할 수 있다. 애자일 개발은 약식으로 진행 → 큰 기업에서는 계약 사항을 정하기 위한 법적 방식과는 안맞음 애자일 기법은 소프트웨어 유지보수보다 소프트웨어 개발 때가 적합 → 큰 기업엣 발생하는 소프트웨어 비용은 대부분 기존 소프트웨어 시스템의 유지 보수 비용임 애자일 기법은 소규모이며 같은 장소에서 일하는 팀을 대상으로 고안 → 요즘 소프트웨어 개발은 전 세계에 분산된 팀에서 이뤄지는 경우가 많음 계약 관련 이슈 애자일 기법 사용시 발생하는 주요 문제 소프트웨어 개발과 관련된 계약 (고객이 시스템 개발을 위해 외부 조직을 활용하는 경우) 소프트웨어 요구사항 문서(고객과 공급자 사이에 발생하는 계약의 일..

[소프트웨어공학] 애자일 프로젝트 관리- 스크럼 [내부링크]

애자일 프로젝트 관리 소프트웨어가 계획된 예산 내에서 기한 내에 개발되어 배포되도록 하는 것 → 소프트웨어 관리자들의 주요 업무 계획 주도 접근법에서의 관리자들의 역할 애자일 개발은 팀이 사용할 수 있는 시간과 자원을 최대한 잘 이용하도록 애자일 기법을 관리 점증적 개발 및 애자일 방법에 사용되는 방식에 맞게 조정된 접근 방식 필요 스크럼 애자일 프로젝트를 조직화하기 위한 프레임워크를 제공, 진행중인 내용에 대한 외부 가시화 제공하는 기법 조직에게 애자일 프레임워크를 제공하는데 초점(특정 개발 방법 강요x) 스크럼 단계 1.개요 계획 단계: 프로젝트의 일반적인 목표 설정 및 소프트웨어 구조 디자인 2.일련의 스프린트 사이클들: 각 사이클은 시스템의 증가분을 개발 3.프로젝트 종료 단계: 필수 문서(도움말..

[소프트웨어공학] 테스트 주도 개발 [내부링크]

테스트 우선 철학 점증적 개발 방식 시스템 테스트를 위해 사용할 수 있는 시스템 명세가 없음 매우 비공식적인 방식으로 테스팅 프로세스 진행(계획 주도 테스팅 대비) 테스트 우선 개발 방법 테스트를 개발 프로세스의 중심에 둠 모든 테스트를 성공하기 전엔 개발을 진행못함 XP에서 수행하는 테스팅의 주요 특징 테스트 우선 개발 시나리오를 가지는 점증적 테스트 개발 테스트 개발 및 검증에서 사용자 참여 테스트 자동화 프레임 워크 사용 테스트 주도 개발법(Test Driven Development) 테스트 우선 철학이 발전하여 일반화된 기법 코드 작성 전에 테스트 먼저 작성 코드를 작성하면서 테스트 실행 가능 개발 과정에서 문제점을 찾을 수 있음 테스트는 프로그램과 같이 작성되어야함 ← 자동으로 테스트를 실행하기..

[소프트웨어공학] 애자일 기법의 개념과 활용 [내부링크]

애자일 기법 등장 배경 예전엔 계획 주도 접근법이 주로 사용됨(1980년대 ~ 1990년대 초) 더 좋은 소프트웨어를 만들기 위해서 대규모의 소프트웨어 제작을 위한 방식이자 그런 시스템을 개발했던 공학단체로부터 비롯됨 예 ) 현대식 항공기 제어 시스템 - 초기 명세부터 배포까지 10년은 족히 걸림 계획, 설계 및 문서화에 오버헤드가 많이 발생 → 애자일 기법 등장 이유 무거운 접근법에 대한 불만 때문에 애자일 기법 등장(1990년대 말) 개발팀이 설계와 문서작업보다 소프트웨어 개발 자체에 더 집중 요구사항이 자주 변경되는 어플 개발할때 적합한 방식 유용한 소프트웨어를 빠르게 만들 수 있도록 고안(신속한 소프트웨어 개발) 신속한 소프트웨어 개발의 필요성 비즈니스 시스템에서 가장 중요한 요구사항 ← 새로운 ..

[소프트웨어 공학] 소프트웨어 프로세스 3가지 모델 [내부링크]

소프트웨어 프로세스 모델 소프트웨어 프로세스 모델 일반적인 소프트웨어 프로세스 모델 폭포수 모델 기본적인 프로세스 활동으로 명세화, 개발,검증,진화 거침 개별적인 프로세스 단계로 모델을 나타냄 점증적 개발 명세화, 개발 및 검증 활동이 서로 중첩되는 접근법 연속적인 버전을 통해 시스템 개발(각각의 버전은 이전버전에 기능 추가) 통합 및 환경 설정(재사용 지향 소프트웨어 공학) 재사용 가능한 컴포넌트나 시스템의 사용가능 여부에 의존하는 접근법 사용할 컴포넌트들을 조합하고 하나의 시스템으로 통합하는데 중점 폭포수 모델( = 소프트웨어 생명 주기) 대규모 군사 시스템 개발에 사용했던 공학 프로세스 모델 기반 계획 주도 프로세스의 한 종료 → 개발 시작 전 모든 활동에 대한 일정 계획 필요 각 단계는 기본적인 ..

[소프트웨어 공학] 소프트웨어 프로세스 공학 활동 [내부링크]

소프트웨어 프로세스 공학 활동 소프트웨어 프로세스 소프트웨어 공학 활동 소프트웨어 명세화 기능과 운영상의 제약조건 정의 소프트웨어 개발 명세를 만족하는 소프트웨어 개발 소프트웨어 검증 고객의 요구와 일치하는지 검증 소프트웨어 진화 변화하는 고객의 요구 충족시키기 위해 진화 프로세스 설명 시 중요한 항목 프로세스 활동의 결과물 제품과 산출물(아키텍처 설계 활동의 결과물 : 소프트웨어 아키텍쳐 모델) 역할 프로세스 참여하는 사람들의 역할(프로젝트 관리자, 형상 관리자, 프로그래머 등) 사전/사후 조건 프로세스 활동 또는 제품 제작 완료 전과 후에 만족해야 하는 조건 아키텍처 프로세스 예시 사전조건(설계 전) : 사용자가 모든 요구사항을 승인해야함 사후조건(설계 후) : 아키텍처를 나타내는 UML모델에 대한 ..

[소프트웨어공학] 소프트웨어공학 윤리와 사례분석 [내부링크]

소프트웨어 공학 윤리 행동 기준 비밀 유지 → 공식적인 비밀 유지에 관한 협약이 없더라도 고객의 비밀을 유지해야한다. 능력 → 엔지니어는 자신의 능력 밖의 일을 알면서도 맡아서는 안된다. 지적 재산권 → 엔지니어는 특허나 저작권 등의 지적 재산 사용을 관장하는 법규를 잘 알고 있어야함 → 고객의 지적 재산이 확실하게 보호받도록 주의해야함 컴퓨터 남용 → 컴퓨터 남용의 목적으로 기술적 능력을 사용해선 안됨(직장 컴퓨터 게임, 바이러스 배포 등) ACM/IEEE 행동강령 ACM과 IEEE는 공동으로 윤리와 직업적 실무에 대한 행동강령을 정함 행동 강령에 대한 축약본은 높은 수준의 추상화에서의 목표를 요약한 것임 → 목표가 어떻게 엔지니어 전문가의 행동을 변화시키는지에 대한 사례와 상세내용 제공 → 목표와 세..

[소프트웨어공학] 소프트웨어공학 개념 및 유형 [내부링크]

소프트웨어 프로그램과 관련된 모든 사항(관련 문서, 라이브러리, 사이트, 환경설정 데이터) 전문적으로 개발된 소프트웨어는 많은 요소들로 구성(다수의 프로그램,환경설정, 시스템 문서 등) 소프트웨어 제품 유형 일반 제품 특정 개발 조직이 생산한 독립적 시스템 누구든 구매 가능 개발 조직이 소프트웨어 명세를 관리 데이터베이스, 문서 편집기, 그래픽 패키지, 회계 시스템 등 맞춤식 소프트웨어 특정 고객의 요구에 맞춰 개발 소프트웨어 계약자는 고객만을 위해서 설계하고 구현 구매자가 소프트웨어 명세를 개발하고 관리 항공 관제 시스템, 전자기기 제어 시스템 이러한 제품유형의 차이는 점점 희미해지고 있음 소프트웨어 필수 특성 수용성(Acceptability) → 설계한 목적에 부합하는 사용자 유형이 수용할 수 있..

[C++] 백준 17485 - 진우의 달 여행 (Large) [내부링크]

문제 이해 단계 문제 우주비행이 꿈이였던 진우는 음식점 '매일매일싱싱'에서 열심히 일한 결과 달 여행에 필요한 자금을 모두 마련하였다! 지구와 우주사이는 N X M 행렬로 나타낼 수 있으며 각 원소의 값은 우주..

[C++] 백준 2624 - 동전 바꿔주기 [내부링크]

문제 이해 단계 문제 명보네 동네 가게의 현금 출납기에는 k 가지 동전이 각각 n1, n2, … , nk개 씩 들어있다. 가게 주인은 명보에게 T원의 지폐를 동전으로 바꿔 주려고 한다. 이때, 동전 교환 방법은 여러 가지..

[C++] 백준 5557 - 1학년 [내부링크]

문제 이해 단계 문제 상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만..

[C++] 백준 9251 - LCS [내부링크]

문제 이해 단계 문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 A..

[C++] 백준 12865 - 평범한 배낭 [내부링크]

문제 이해 단계 문제 이 문제는 아주 평범한 배낭에 관한 문제이다. 한 달 후면 국가의 부름을 받게 되는 준서는 여행을 가려고 한다. 세상과의 단절을 슬퍼하며 최대한 즐기기 위한 여행이기 때문에, 가지고 다닐..

[Unity 3D] #3 코루틴을 활용한 작아지는 효과 구현 - Avoid Chess [내부링크]

학교 과제랑 스터디, 알바 등 여러가지에 치여다니느라 게임 프로젝트가 우선순위에서 밀리다보니 일주일정도 손을 못 댔다. 오랜만에 살짝 여유시간이 생겨서 프로젝트를 할 수 있게 됐다. 곧 있으면 중간고사라..

[C++] 백준 2293 - 동전1 [내부링크]

문제 이해 단계 문제 n가지 종류의 동전이 있다. 각각의 동전이 나타내는 가치는 다르다. 이 동전을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그 경우의 수를 구하시오. 각각의 동전은 몇 개라도..

[C++] 백준 21317 - 징검다리 건너기(DP풀이) [내부링크]

문제 이해 단계 문제 심마니 영재는 산삼을 찾아다닌다. 산삼을 찾던 영재는 N개의 돌이 일렬로 나열되어 있는 강가를 발견했고, 마지막 돌 틈 사이에 산삼이 있다는 사실을 알게 되었다. 마지막 돌 틈 사이에..

[C++] 백준 11660 - 구간 합 구하기5 [내부링크]

문제 이해 단계 문제 N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다. 예를 들어, N = 4이고, 표가 아래와 같이 채..

[C++] 백준 2294 - 동전2 [내부링크]

문제 이해 단계 문제 n가지 종류의 동전이 있다. 이 동전들을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그러면서 동전의 개수가 최소가 되도록 하려고 한다. 각각의 동전은 몇 개라도 사용할 수..

[C++] 백준 10844 - 쉬운 계단 수 [내부링크]

문제 이해 단계 문제 45656이란 수를 보자. 이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다. N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수..

[C++] 백준 2156 - 포도주 시식 [내부링크]

문제 이해 단계 문제 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지..

[C++] 백준 9095 - 1,2,3 더하기 [내부링크]

문제 이해 단계 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의..

[C++] 백준 15486 - 퇴사2 [내부링크]

문제 이해 단계 문제 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. 오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다. 백준이는 비서에게 최대한 많은 상담..

[C++] 백준 9465 - 스티커 [내부링크]

문제 이해 단계 문제 상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다. 상냥이가 구매한 스티..

[C++] 백준 1890 - 점프 [내부링크]

문제 이해 단계 문제 N×N 게임판에 수가 적혀져 있다. 이 게임의 목표는 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 점프를 해서 가는 것이다. 각 칸에 적혀있는 수는 현재 칸에서 갈 수 있는 거..

[C++] 백준 11055 - 가장 큰 증가 부분 수열 [내부링크]

이해 단계 문제 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증..

[C++] 백준 11053 - 가장 긴 증가하는 부분 수열 [내부링크]

문제 이해 단계 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10,..

[C++] 백준 22857 - 가장 긴 짝수 연속한 부분 수열 (small) [내부링크]

문제 이해 단계 문제 길이가 N인 수열 S가 있다. 수열 S는 1 이상인 정수로 이루어져 있다. 수열 S에서 원하는 위치에 있는 수를 골라 최대 K번 삭제를 할 수 있다. 예를 들어, 수열 S가 다음과 같이 구성되..

[C++] 백준 2407 - 조합 [내부링크]

문제 이해 단계 문제 nCm을 출력한다. 입력 n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n) 출력 nCm을 출력한다. 예제 입력 1 100 6 예제 출력 1 1192052400 수학에서 조합을 뜻하는 nCr에서 n..

[C++] 백준 17626 - Four Square [내부링크]

문제 이해 단계 문제 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42..

[C++] 백준 2579 - 계단 오르기 [내부링크]

문제 이해 단계 문제 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는..

프로세스와 쓰레드의 차이 (Process vs Thread) [내부링크]

프로세스와 쓰레드의 개념 우선 차이점을 알기 위해서 프로세스와 쓰레드의 개념부터 간단히 살펴보자. 프로세스(Process) : 운영체제로부터 자원을 할당받는 작업의 단위 프로세스는 운영체제에서 다루는 용어인..

[Unity 3D] #2 - 파티클 시스템을 활용한 방사형 보스 패턴 구현 [내부링크]

구현 목표 보스 패턴 중 부채꼴로 불을 뿜는 보스 패턴을 만들려고 한다. 플레이어의 위치를 인식하고, 일정 시간동안 부채꼴로 불꽃을 방사한다. 불꽃에 닿은 플레이어는 데미지를 입는다. 목표를 확실히 하기 위..

[Unity 3D] #1 - 적 밟아서 데미지 주기 구현 [내부링크]

구현 목표 마리오 게임처럼 적군을 밟아서 데미지를 주는 것을 구현하려고 한다. 데미지를 주는 것과 동시에 밟았을 때 조금 위로 튕겨 올라가는 효과를 부여하려고 한다. 그림은 좀 허접하긴 한데, 위의 그림처..

[C++] 백준 1010 - 다리 놓기 [내부링크]

문제 이해 단계 문제 재원이는 한 도시의 시장이 되었다. 이 도시에는 도시를 동쪽과 서쪽으로 나누는 큰 일직선 모양의 강이 흐르고 있다. 하지만 재원이는 다리가 없어서 시민들이 강을 건너는데 큰 불편을 겪..

[C++] 백준 9466 - 텀프로젝트 [내부링크]

문제 이해 단계 문제 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만..

[C++] 백준 2839 - 설탕배달 (DP풀이) [내부링크]

문제 이해 단계 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그..

[C++] 백준 22868 - 산책(small) [내부링크]

문제 이해 단계 문제 코로나로 인하여 확찐자가 되버려 오늘부터 산책을 하려고 한다. 산책할 경로를 정하려고 한다. 현재 있는 곳 S에서 출발하여 S와 다른 곳인 E를 찍고 다시 S로 돌아오는 경로로 만들려..

[C++] 백준 22948 - 원 이동하기 2 [내부링크]

문제 이해 단계 문제 좌표평면에 원의 중심이 x축 위에 있는 N개의 원이 존재한다. N개의 원 중 임의의 두개의 원을 선택했을 때 내접, 외접 등 교점이 존재하지 않도록 존재한다. 하나의 원이 다른 원 안에 포함..

[C++] 백준 22946 - 원 이동하기 1 [내부링크]

문제 이해 단계 문제 좌표평면에 N개의 원이 존재한다.  N개의 원 중 임의의 두개의 원을 선택했을 때 내접, 외접 등 교점이 존재하지 않도록 존재한다. 하나의 원이 다른 원 안에 포함될 수는 있다. 하나의 원..

[C++] 백준 1967 - 트리의 지름 [내부링크]

문제 이해 단계 문제 트리(tree)는 사이클이 없는 무방향 그래프이다. 트리에서는 어떤 두 노드를 선택해도 둘 사이에 경로가 항상 하나만 존재하게 된다. 트리에서 어떤 두 노드를 선택해서 양쪽으로 쫙 당길 때,..

[C++] 백준 13023 - ABCDE [내부링크]

문제 이해 단계 문제 BOJ 알고리즘 캠프에는 총 N명이 참가하고 있다. 사람들은 0번부터 N-1번으로 번호가 매겨져 있고, 일부 사람들은 친구이다. 오늘은 다음과 같은 친구 관계를 가진 사람 A, B, C, D, E가 존재..

[C++] 백준 17836 - 공주님을 구해라 [내부링크]

문제 이해 단계 문제 용사는 마왕이 숨겨놓은 공주님을 구하기 위해 (N, M) 크기의 성 입구 (1,1)으로 들어왔다. 마왕은 용사가 공주를 찾지 못하도록 성의 여러 군데 마법 벽을 세워놓았다. 용사는 현재의 가지..

[C++] 백준 1600 - 말이 되고픈 원숭이 [내부링크]

문제 이해 단계 문제 동물원에서 막 탈출한 원숭이 한 마리가 세상구경을 하고 있다. 그 녀석은 말(Horse)이 되기를 간절히 원했다. 그래서 그는 말의 움직임을 유심히 살펴보고 그대로 따라 하기로 하였다. 말은..

[C++] 백준 14502 - 연구소 [내부링크]

문제 이해 단계 문제 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크..

[C++] 백준 18513 - 샘터 [내부링크]

문제 이해 단계 문제 일직선 상의 공간에 N개의 샘터가 존재하며, K채의 집을 짓고자 한다. 모든 샘터 및 집이 존재하는 위치는 항상 정수 형태이다. 이때 일직선 상의 공간에서 N개의 샘터 및 K채의 집들은..

[C++] 백준 11724 - 연결 요소의 개수 [내부링크]

문제 이해 단계 문제 방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000,..

[C++] 백준 13549 - 숨바꼭질3 [내부링크]

문제 이해 단계 문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이..

[C++] 백준 16918 - 봄버맨 [내부링크]

문제 이해 단계 문제 봄버맨은 크기가 R×C인 직사각형 격자판 위에서 살고 있다. 격자의 각 칸은 비어있거나 폭탄이 들어있다. 폭탄이 있는 칸은 3초가 지난 후에 폭발하고, 폭탄이 폭발한 이후에는 폭탄이 있던..

[C++] 백준 2109 - 순회강연 [내부링크]

문제 이해 단계 문제 한 저명한 학자에게 n(0 ≤ n ≤ 10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1 ≤ d ≤ 10,000)일 안에 와서 강연을 해 주면 p(1 ≤ p ≤ 10,000)만큼의 강연료를 지불하겠..

[C++] 백준 1092 - 배 [내부링크]

문제 이해 단계 문제 지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동..

[C++] 백준 2212 - 센서 [내부링크]

문제 이해 단계 문제 한국도로공사는 고속도로의 유비쿼터스화를 위해 고속도로 위에 N개의 센서를 설치하였다. 문제는 이 센서들이 수집한 자료들을 모으고 분석할 몇 개의 집중국을 세우는 일인데, 예산상의 문..

[C++] 백준 20365 - 블로그2 [내부링크]

문제 이해 단계 문제 neighbor 블로그를 운영하는 일우는 매일 아침 풀고 싶은 문제를 미리 정해놓고 글을 올린다. 그리고 매일 밤 각각의 문제에 대하여, 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로..

[C++] 백준 20300 - 서강근육맨 [내부링크]

문제 이해 단계 문제 자체는 굉장히 단순하다. 운동을 2개씩 짝지어 하는데, 하나가 남을 경우 그건 따로 진행한다. 이런 식으로 진행하는데 2개의 숫자의 합과 남은 하나의 숫자를 최소 값으로 하는 수를 찾는..

[C++] 백준 1343 - 폴리오미노 [내부링크]

문제 이해 단계 문제 민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. 이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는..

[C++] 백준 5639 - 이진 검색 트리 [내부링크]

문제 이해 단계 문제 이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다. 노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다. 노드의 오른쪽 서브트리에 있는 모든 노드의 키..

[C++] 백준 2346 - 풍선 터트리기 [내부링크]

문제 이해 단계 문제 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1..

[C++] 백준 3190 - 뱀 [내부링크]

문제 이해 단계 문제  'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다...

[C++] 백준 9996 - 한국이 그리울 땐 서버에 접속하지 [내부링크]

문제 이해 단계 문제 패턴은 알파벳 소문자 여러 개와 별표(*) 하나로 이루어진 문자열이다. 파일 이름이 패턴에 일치하려면, 패턴에 있는 별표를 알파벳 소문자로 이루어진 임의의 문자열로 변환해 파일 이름과..

[C++] 백준 1182 - 부분수열의 합 [내부링크]

문제 이해 단계 문제 N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수를..

[유니티 3D] Time.deltaTime의 개념과 활용 [내부링크]

Time.deltaTime은 유니티에서 딜레이 계산 등의 시간 계산에서 항상 쓰이는 변수이다. 그런데 정확히 deltaTime이 무엇이고 이걸 굳이 왜 사용해야 할까? deltaTime이란? deltaTime이 무엇인가를 이해하기 위해서..

[C++] 백준 1874 - 스택 수열 [내부링크]

문제 이해 단계 문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간..

[C++] 백준 2630 - 색종이 만들기 [내부링크]

문제 이해 단계 문제 아래 <그림 1>과 같이 여러개의 정사각형칸들로 이루어진 정사각형 모양의 종이가 주어져 있고, 각 정사각형들은 하얀색으로 칠해져 있거나 파란색으로 칠해져 있다. 주어진 종이를 일정한 규..

[C++] 백준 1966 - 프린터 큐 [내부링크]

문제 이해 단계 해당 문제는 간단해서 이해하는데는 크게 어려움이 없었다. 그냥 자료구조 '큐' 안에 우선순위가 있는 문서들이 있는데, 우선순위에 따라 출력한다. 그 중 인덱스 M에 해당하는 문서가 몇번째로..

[C++] 백준 6236 - 용돈관리 [내부링크]

문제 이해 단계 해당 문제는 이해하는데만 해도 30분정도 걸렸다. 요약하자면, N일 동안 용돈 관리를 하는데, 그 날 사용해야 할 금액이 존재한다. 용돈 관리를 하다가 돈이 부족하면 금액 K를 인출한다. 이 때,..

동시성 vs 병렬성(Concurrency vs Parallelism) [내부링크]

동시성과 병렬성을 비교하기 위해서는 일단 두 가지 개념에 대한 정확한 이해가 필요하다. 동시성 병렬성 시각적으로 동시에 실행되는 것으로 보임(실제로는 X) 실제로 동시에 여러 작업이 실행 논리적인 개념 물..