반응형

알고리즘 99

백준 2309 일곱 난쟁이 c++ [컴공과고씨]

https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 입력을 받은 총합에서 2개의 값을 빼주었을 때 값이 100이 되는 것을 찾아서 출력해주었다. 브루트 포스(brute force) 유형의 문제였다. 단계별 문제 풀이 1. 입력 값을 배열에 저장 그리고 전체 합을 저장 2. 정렬 -> 나중에 출력을 오름차순으로 해야하기 때문에 미리 sort해줌 3. 이중 포문을 이용하여 2개의 값을 빼면서 합이 100이 되는 것을 찾음 구조 4. 합이 100이 될 경우 2개..

알고리즘/백준 2022.03.28

백준 1620 나는야 포켓몬 마스터 이다솜 c++ [컴공과고씨]

https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 이 문제의 경우 시간초과를 잘 통과해야하는 문제이다. 그러기 위해서는 해시맵을 사용해야하며 문제를 보면 번호를 주면 포켓몬 이름을 포켓몬 이름을 주면 도감 번호를 답해야한다. 하지만 해시맵은 Key, value가 있고 key값으로 value를 찾는건 빠르지만(포켓몬 이름(key)을 주었을 때 도감 번호(value)를 찾는) value(도감번호)로 key(포켓몬 이름) ..

알고리즘/백준 2022.03.28

백준 1463 1로 만들기 c++ [컴공과고씨]

https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 이 문제를 보고 bfs로 탐색을 하여 풀면 쉽게 풀릴거라고 생각해서 bfs로 풀어주었다. 풀고 난 후 힌트 부분쪽에는 다이나믹 프로그래밍이라고 되어있어서 다이나믹 프로그래밍으로도 풀고 두 개 방식 모두 정리해보았다. 첫번째 방식은 bfs로 푼 방식으로 처음에 딱 떠올라서 푼 방식이다. 입력 받은 n을 bfs에 넣어주면 bfs는 - 3으로 나눠지고 나눈수가 방문되어지지 않은 경우 큐에 넣어준다. - 2로 나눠지고 나눈수가 방문되어지지 않은 경우 큐에 넣어준다. - 1을 뺀 수가 방문되어지지 않은 경우 큐에 넣어준..

알고리즘/백준 2022.03.27

백준 1107 리모컨 c++ [컴공과고씨]

https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 해결하는 방법은 브루트 포스 방식을 이용해서 풀어주었다. 문제를 풀때 3단계로 나눠서 풀어주었는데 그 방식을 정리해보았다. 1. bool형 배열을 생성 -> 이 배열에는 채널이 번호를 눌러서 만들어 질 수 있는지를 저장한다. 그래서 없는 버튼이 들어가있는 채널에는 false 넣어준다. 이 때 버튼이 있는지 없는지를 확인하는 방법은 채널을 string으로 바꾸어주고 처음에 버튼을 입..

알고리즘/백준 2022.03.27

백준 3079 입국심사 c++ [컴공과고씨]

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 이 문제는 처음에 감을 잘 못잡았다. 처음에는 최소 시간을 구하려는 방법을 생각하니 당연히 답이 나올 수 없었다. 그래서 고민 좀 많이 하고 생각을 바꿔서 시간을 기준으로 해서 각 시간마다 얼만큼의 사람을 통과시킬 수 있는지로 구현을 하여서 심사할 수 있는 인원의 조건을 만족하는 시간 중에서 최소값을 찾아주는 식으로 구현하였다. 중요한 것은 범위가 엄청 크기때문에 시간초과에 걸릴 수..

알고리즘/백준 2022.03.26

백준 18111 마인크래프트 c++ [컴공과고씨]

https://www.acmicpc.net/problem/18111 18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net 문제를 정리하면 땅 높이를 맞추어 주는 것인데 이제 땅을 쌓는건 1초, 깎는건 2초 걸리고 쌓을 때는 블록이 있어야 쌓을 수 있다. 최대높이가 256이기 때문에 땅을 0으로 고르는, 1로 고르는 ...... 256으로 고르는 시간을 각각 계산해서 비교해주는 식으로 풀었다. 위 방법을 brute force (브루트포스) 무차별 대입이라고 한다. 먼저 높이의 개수를 저장하는 hight 배열을 만들었..

알고리즘/백준 2022.03.25

백준 4375 1 c++ [컴공과고씨]

https://www.acmicpc.net/problem/4375 4375번: 1 2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오. www.acmicpc.net 이 문제는 시간초과로 못풀어서 어떤식으로 풀어야하는지 처음으로 답을 참고를 했던 문제이다. 그래서 나중에 한번 더 복습이 필요할 것 같다. 아무튼 어떤식으로 풀었고 시간초과가 났으면 어떤식의 해결방법이 옳았는지 보겠다. 처음 푼 방법은 1, 11, 111, 1111이렇게 직접 n으로 나누어가면서 1의 개수를 늘려주어 나머지가 0인것을 찾으면 될거라고 생각했다. 하지만 이렇게 풀면 시간 초과가 걸리기 때문에 나머지 연산 공식을 써주어야한다. 이 문제는 나머지..

알고리즘/백준 2022.03.24

백준 4963 섬의 개수 c++ [컴공과고씨]

https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 문제를 보고 탐색으로 풀어야겠다고 생각했다면 바로 풀 수 있다. 한가지 조금 다른 문제와 다른거는 대각선으로 땅을 밟을 수 있기 때문에 대각선을 고려해야한다는 것만 주의해주면된다. 기존에 상하좌우를 dx[] = {0,0,-1,1} = dy[] = {1,-1,0,0} 이런식으로 4번을 반복해서 움직여주었다면 이번거는 dx[] = {0,0,-1,1, 1,1,-1,-1} = dy[] = {1,-1..

알고리즘/백준 2022.03.24

백준 2217 로프 c++ [컴공과고씨]

https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 이 문제는 어떤 식으로 접근했냐면 한 로프를 사용한다고 가정했을 때, 자기보다 많은 무게를 드는 로프는 결국 자신의 로프의 최대 들 수 있는 용량을 모두 들 수 있다는 것을 이용했다. 10 30 50 50 85 90 이라는 무게를 들 수 있는 로프가 있을 때 10로프를 이용해서 들 수 있는 최대 중량은? 10과 10보다 큰 로프의 개수를 10에 곱해주면 총 60을 들 수 있다. 30로프를..

알고리즘/백준 2022.03.24

백준 1758 알바생 강호 c++ [컴공과고씨]

https://www.acmicpc.net/problem/1758 1758번: 알바생 강호 첫째 줄에 스타박스 앞에 서 있는 사람의 수 N이 주어진다. N은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 총 N개의 줄에 각 사람이 주려고 하는 팁이 주어진다. 팁은 100,000보다 작거나 같 www.acmicpc.net 이 문제를 보고 조금 생각을 해본 결과 팁을 많이 주고 싶어하는 사람들을 앞쪽에 세워야지 가장 많은 팁을 얻을 수 있다. 왜냐하면 뒤로 등수가 밀릴수록 그 만큼 빼주어야한다. 그렇다면 팁을 10을 주고 싶은사람이 10등인것과 팁을 1을 주고싶은 사람이 10등이라면 전자는 0원 후자는 음수가 되어진다. 여기서 음수는 0으로 처리가 되어지기 때문에 둘다 똑같이 못받는 꼴이 된다. 그..

알고리즘/백준 2022.03.24
반응형