https://www.acmicpc.net/problem/1120

 

1120번: 문자열

길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이때, A의 길이는 B의 길이보다 작거나 같다. 이제 A의 길이가 B의 길이와 같아질 때 까지 다음과 같은 연산을 할 수 있다. A의 앞에 아무 알파벳이나 추가한다. A의 뒤에 아무 알파벳이나 추가한다. 이때, A와 B의 길이가 같으

www.acmicpc.net

- 문제 파악은 어렵지 않고

 

- 입력 출력 조건을 읽어보면

 

- 처음 든 생각은 a(더 짧은 문자열) 을 b(긴 문자열) 의 어느 위치에 위치를 시켜야 같은 문자를 가지는 값이

 

- max가 되는지를 파악한 후 그 값을 a문자열의 길이에서 빼주면 최소로 다른 글자가 나옵니다.

(어차피 위치 시킨이후 다른 문자들은 b와 완벽하게 같은 글자들을 넣어주면 되므로 신경 쓸 필요가 없습니다.)

 

<코드>

'알고리즘 문제풀이 > 그리디' 카테고리의 다른 글

백준 1049  (0) 2020.02.23
백준 1946  (0) 2020.02.23
백준 1541  (0) 2020.02.20
백준 2875  (0) 2020.02.11
백준 10610  (0) 2020.02.10

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.

www.acmicpc.net

-입력, 출력은 문제를 통해 쉽게 파악가능하고

 

- 이제 입력을 어떻게 받아와서 이론적으로는 -가 나오면 괄호를 열고

 

- 다음 -가 오기전에 괄호를 닫는 것인데

 

- 구현을 할 때 -가 처음나오면 check를 하고 tmp로 다음 연산부호가 오기전에 더해주고(string 즉 한글자씩이므로)

 

- 그다음부터는 그냥 -부호 붙은 수는 +붙은 수 그냥 다 빼주면 됩니다.

 

- 왜냐? 괄호는 무제한 이니까.....! 자신이 +면 가장 가까운곳에있는 -와 묶어서 빼면 되니깐....

<필기>

<코드>

 

'알고리즘 문제풀이 > 그리디' 카테고리의 다른 글

백준 1946  (0) 2020.02.23
백준 1120  (0) 2020.02.23
백준 2875  (0) 2020.02.11
백준 10610  (0) 2020.02.10
백준 2217  (0) 2020.02.10

https://www.acmicpc.net/problem/11724

 

11724번: 연결 요소의 개수

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.

www.acmicpc.net

연결 요소를 구하는 문제 입니다..

 

연결요소의 정확한 정의가 나와있지 않아 감은 대충 왔으나 검색을 한번 해보고 문제를 풀었습니다.

 

문제를 분석 하고는 dfs로 푸는 것이 편하겠다 싶어 dfs로 풀었습니다.

 

정점 index 순서대로 dfs를 도는데 이미 방문한 정점이면 dfs를 돌지 않습니다.

 

그리고 저는 처음에 아무것도 연결되지 않은 정점은 연결요소로 count를 하지 않는 다고 생각했으나

 

그럴 경우도 연결요소로 count를 하셔야 합니다 (즉 , 입력(6, 0) ---정점만 6개 일경우 결과값은 6입니다.)

 

은근 저와같은 생각을 하신분들이 있으시리라 생각합니다.....

 

그 외에는 쉬운 문제입니다.

 

<풀이>

<코드>

 

'알고리즘 문제풀이 > DFS와 BFS' 카테고리의 다른 글

백준 2583  (0) 2020.03.02
백준 14502  (0) 2020.02.17
백준 2178  (0) 2020.01.14
백준 1260  (0) 2020.01.14
백준 2667  (0) 2020.01.14

https://www.acmicpc.net/problem/2579

 

2579번: 계단 오르기

계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다. 예를 들어 <그림 2>와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다. 계단 오르는 데는 다음과 같은 규칙이 있다. 계단은 한 번에 한 계단씩

www.acmicpc.net

다이나믹 프로그래밍을 이용하였습니다.

 

조건3개를 잘 파악한 후 고민을 좀 했는데

 

2번째 문제 조건을 잘 이용해야 했습니다.

 

목표계단을 무조건 밟아야 한다는 가정하에(조건3)

 

두가지 경우의 수가 나옵니다 (조건1)

 

1) 바로 전계단을 밟고 목표계단을 밟는경우

 

2) 전전계단을 밟고 목표계단을 밟는 경우

 

하지만 1번 조건을 그대로 적용할 경우 3번연속된 계단을 밟게 되는 경우가 생길수 있습니다.(즉 조건2 를 무시한 상태)

 

즉 전계단을 밟기전에는 전전전계단을 밟았어야 한다는 조건이 들어가야 합니다.(조건추가)

 

dp는 최대값을 저장한 배열이고 stairvalue는 각 계단의 값을 넣어놓은 배열 입니다.

 

<필기>

<코드>

'알고리즘 문제풀이 > 다이나믹 프로그래밍' 카테고리의 다른 글

백준 11726 [C++]  (0) 2020.12.14
백준 7570 [C++]  (0) 2020.12.02
백준 12865 [C++]  (0) 2020.11.29
백준 1932  (0) 2020.03.02
백준 9095  (0) 2020.02.01

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

정렬에 관련된 문제입니다.

 

sorting을 하면서 조건을 조금씩만 걸어서 주면 되는 문제이구요

 

compare 을 선언해서 sort를 하는데 조건으로 사용하였고

 

같은 문자가 있는경우 생략해서 출력해야 하는데 이는 입력을 받을때나 또는 따로 비교를 해서 제거를 하려 하면

 

비교를 하는데 있어서 따로 시간을 또 사용해야 할 것 같아서

 

출력을 할때 비교하여 생략하는 방식으로 구현하였습니다.

 

'알고리즘 문제풀이 > 정렬' 카테고리의 다른 글

백준 1620 [C++]  (0) 2021.01.09
백준 2887 [C++]  (0) 2020.10.27
백준 10825 [C++]  (0) 2020.10.25
백준 10814  (0) 2020.03.02
백준 1427  (0) 2020.01.08

https://www.acmicpc.net/problem/2178

 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net

문제를 분석해 보면 최소한의 점

 

시작하는위치(1,1) 과 가야하는점(N,M)은 정해져 있습니다.

 

어떻게 하면 최단거리로 갈 수 있는지를 구하는 문제인데

 

DFS로 구현할경우 시간초과의 문제를 겪을 수 있습니다.(최악의경우)

 

BFS 냄새가 풀풀...

 

BFS를 돌면서 큐에다가 다음 깊이의 점들을 모두 넣는 식입니다.

 

그렇게 하다가 목적지가 맞을경우 BREAK 하도록!

 

기본적인 BFS문제가 아닐까 싶습니다.

 

 

 

<MAIN> 함수 입니다.

 

 

'알고리즘 문제풀이 > DFS와 BFS' 카테고리의 다른 글

백준 2583  (0) 2020.03.02
백준 14502  (0) 2020.02.17
백준 11724  (0) 2020.02.13
백준 1260  (0) 2020.01.14
백준 2667  (0) 2020.01.14

https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.

www.acmicpc.net

 

DFS와 BFS를 탐색을 하는 기본문제입니다.

 

개념을 익히는 정도 라고 하면 되겠네요!

 

깊이우선 탐색을 먼저 하고 너비우선 탐색을 하면 됩니다.

 

이차원 배열을 통해서 점과 점이 연결되었는지 여부를 확인(간선)

 

간선은 입력받을떄 [x][y] =1은 물론 [y][x]=1도 넣어주었습니다(양방향 간선 이므로)

 

일차원 배열을 통해 방문을 했는지 여부를 확인하는 용도로 사용하였습니다.

 

<main> 함수

 

'알고리즘 문제풀이 > DFS와 BFS' 카테고리의 다른 글

백준 2583  (0) 2020.03.02
백준 14502  (0) 2020.02.17
백준 11724  (0) 2020.02.13
백준 2178  (0) 2020.01.14
백준 2667  (0) 2020.01.14

https://www.acmicpc.net/problem/2667

 

2667번: 단지번호붙이기

<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집들의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. <그림 2>는 <그림 1>을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수

www.acmicpc.net

DFS 기본 문제 느낌이였습니다.

 

깊이우선 탐색입니다.

 

한 점(집) 을 발견하면 일단 그 집과 연결된 모든 집을 탐색하고(탐색하면서 방문 했다고 체크)

 

다음에 FOR문을 돌때는 집이 있어도 이미 방문되었다고 표시가 되어 있으면

 

DFS를 돌지 않도록 하였습니다.

 

MAP은 그냥 정적으로 만들었고 (N)값 범위가 정해져 있으므로 N의 최대값으로 설정 하였습니다.

 

체크나 출력은 N값을 이용하면 되므로..

 

'알고리즘 문제풀이 > DFS와 BFS' 카테고리의 다른 글

백준 2583  (0) 2020.03.02
백준 14502  (0) 2020.02.17
백준 11724  (0) 2020.02.13
백준 2178  (0) 2020.01.14
백준 1260  (0) 2020.01.14

+ Recent posts