[백준] 두 수의 합 3273 (Silver3) — 해시 개념으로 시간복잡도 줄이기
·
Algorithms/Problem Solving
https://www.acmicpc.net/problem/3273 문제 간단 요약길이 N의 수열이 주어진다.서로 다른 두 수 a, b를 골라 a + b = X를 만족하는 쌍의 개수를 구하라.같은 쌍을 순서만 바꿔서 세면 안 된다.(예: (1, 9)와 (9, 1)은 같은 쌍) 핵심은 모든 쌍을 다 보지 않고도 조건을 만족하는 경우의 수를 빠르게 세는 것. 처음 떠올릴 수 있는 풀이 (하지만 비효율적)가장 직관적인 방법은 이중 반복문이다.모든 원소 a에 대해나머지 모든 원소 b를 더해보며 a + b == X인지 확인이 경우 시간복잡도는-> O(N²)N이 커질수록 시간 초과가 날 수밖에 없다.관점 전환: “더하는 대신, 존재 여부를 확인하자”이 문제를 이렇게 바꿔서 생각할 수 있다.arr에 어떤 값 a가 있을..
[프로그래머스] 기능 개발 42586 (Level 2) - C++
·
Algorithms/Problem Solving
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42586📌 문제 요약각 기능은 순서대로 개발되며, 다음과 같은 규칙을 가진다.기능마다 현재 진행률(progresses)과 하루 개발 속도(speeds)가 주어진다.기능은 앞에 있는 기능이 완료되어야만 배포 가능하다.하루가 지날 때마다 모든 기능의 진행률이 증가한다.배포 시에는 연속된 기능들만 함께 배포된다.입출력 예progresspeedreturn[93, 30, 55][1, 30, 5][2, 1][95, 90, 99, 99, 80, 99][1, 1, 1, 1, 1, 1][1, 3, 2]💭 처음 접근: “요세푸스 문제처럼 순번을 계속 넘겨야 하네?”문제를 처음 봤을 때 떠올린 생각은 이랬다..
[백준] 요세푸스 문제 1158 (Silver4) - C++
·
Algorithms/Problem Solving
문제 링크https://www.acmicpc.net/problem/1158 📌 문제 요약1부터 N까지 번호가 붙은 사람들이 원형으로 앉아 있다.매번 K번째 사람을 제거한다.제거되는 순서를 형식으로 출력한다.전형적인 시뮬레이션 문제처럼 보이지만,이 문제의 본질은 “원형 구조를 어떻게 표현할 것인가”에 있다.💡 접근 아이디어처음 떠올릴 수 있는 방법은 여러 가지다.배열 + 인덱스 계산원형 연결 리스트수학적 점화식하지만 이 문제에서 가장 직관적이고 실수 없는 방법은 큐(queue) 를 사용하는 것이다.핵심 관찰“원형(Cycle)은 선입선출(FIFO)의 재입력이다.”맨 앞 사람을 꺼내서 다시 맨 뒤로 보내면사람들은 자연스럽게 원형으로 회전한다굳이 % 연산으로 인덱스를 계산하거나,복잡한 자료구조를 만들 필요..
[프로그래머스] 괄호 회전하기 76502 (Level 2) - C++
·
Algorithms/Problem Solving
https://school.programmers.co.kr/learn/courses/30/lessons/76502? 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 📌 문제 핵심 요약문자열 s가 주어질 때문자열을 왼쪽으로 0칸 ~ length-1칸 회전각 회전 결과가 올바른 괄호 문자열이면 카운트괄호 종류: (), {}, []입출력 예 #1입력 : "[](){}" xs를 왼쪽으로 x칸만큼 회전 올바른 괄호 문자열? 0"[](){}"O1"](){}["X2"(){}[]"O3"){}[]("X4"{}[]()"O5"}[](){"X올바른 괄호 문자열이 되는 x가 3개이므로, 3을 return 해야 한다.💭 처음 문제 접..
[프로그래머스] 실패율 42889 (Level 1) - C++
·
Algorithms/Problem Solving
https://school.programmers.co.kr/learn/courses/30/lessons/42889 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 📌 문제 요약실패율의 정의는 다음과 같다.실패율 = (해당 스테이지에 도달했지만 아직 클리어하지 못한 플레이어 수) / (해당 스테이지에 도달한 전체 플레이어 수)스테이지 수 N (1 ≤ N ≤ 500)사용자들이 현재 멈춰 있는 스테이지 번호 배열 stages실패율이 높은 스테이지부터 내림차순 정렬실패율이 같으면 스테이지 번호가 작은 것부터❗️ 도달한 유저가 없는 스테이지의 실패율은 0 입출력 예Nstagesresult5[2, 1, 2, 6, 2, 4..
14425 문자열 집합[c++] unordered_set
·
Algorithms/Problem Solving
https://www.acmicpc.net/problem/1442514425번: 문자열 집합문제 총 N개의 문자열로 이루어진 집합 S가 주어진다. 입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다. 입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지...www.acmicpc.net #include #include #include u..