www.acmicpc.net/problem/1439

 

1439번: 뒤집기

다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모

www.acmicpc.net

1. 문제풀이 방법

 

- 0과,1 의 그룹을 묶어서 더 그룹이 적은 쪽을 뒤집어 줘야 적은 횟수로 통일을 할 수 있다.

 

 

2. 주의사항

 

- 전 어려운 문제인줄 알았던게 문제를 잘못읽어서 연속된 두 숫자 이상 뒤집을 수 있다는 건줄 알았습니다;;

 

 

- 0010 의경우 1은 하나라서 못뒤집어서 앞에 00을 뒤집고 1110을 만든뒤 다시 111을 뒤집어 0000을 만들어야

되는 줄 알고 꽤나 머리를 굴렸는데....알고보니 매우 간단한...문제.......문제를 꼼꼼히 똑바로 읽자 !

 

 

 

3.나의 코드

include<iostream>
#include<string>
#include<algorithm>
using namespace std;


int count0;
int count1;
int resultcount;
int main() {


	string inputs;
	cin >> inputs;
	if (inputs[0] == '0') { count0++; }
	else { count1++; }

	int nows=inputs[0];

	for (int i = 1; i < inputs.length(); i++) {
		if (inputs[i] != nows) {
			if (inputs[i] == '0') { count0++; nows = inputs[i]; }
			else { count1++; nows = inputs[i]; }
		}
	}
	cout << min(count0, count1) << "\n";
	return 0;
}

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

백준 8980 [C++]  (0) 2020.12.05
백준 1969 : DNA  (0) 2020.03.24
백준 1138  (0) 2020.02.28
백준 1049  (0) 2020.02.23
백준 1946  (0) 2020.02.23

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

 

1969번: DNA

문제 DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오티드의 첫글자를 따서 표현한다. 만약에 Thymine-Adenine-Adenine-Cytosine-Thymine-Guanine-Cytosine-Cytosine-Guanine-Adenine-Thymine로 이루어진

www.acmicpc.net

문제의 입력과 출력을 명확히 이해한 후

 

저는 문자열의 배열을 선언하여 (마치 이차원 배열처럼)  (string은 index단위로 접근이 가능하기 때문에)

 

입력을 받고 출력할 char배열 hamDNA와 그때의 디스턴스 의 합을 나타내는 변수 hmdistancesum을 선언 하였습니다.

 

전략은 문자열을 하나씩 확인 하는데 한번에 한자리씩 ...

 

즉 1번째 문자열의 1번째 자리, 2번째 문자열의 1번째 자리, 3번째 문자열의 1번째 자리.....

 

그 후 1번째 문자열의 2번째 자리, 2번째 문자열의 2번째 자리, 3번째 문자열의 두번째 자리...를 살펴보아

 

ACGT중 가장 많이 나오는 숫자로 설정해야 해밍디스턴스는 가장 최소가 되므로 그 값을 hamDNA 벡터에 넣어 

 

주었습니다.

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

백준 8980 [C++]  (0) 2020.12.05
백준 1439 [C++]  (0) 2020.10.16
백준 1138  (0) 2020.02.28
백준 1049  (0) 2020.02.23
백준 1946  (0) 2020.02.23

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

 

1138번: 한 줄로 서기

첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 크거나 같고, N-i보다 작거나 같다.

www.acmicpc.net

- 처음에 생각하면 복잡한데..... 생각을 하다가 하나씩 어떻게 할까 맞춰보면 쉬운 문제....

 

- 사실 꽤 어려운 문제라고 개인적으로 생각합니다....복잡......

 

- 짜고 나서 보면 매우 쉽지만....

 

- 핵심은 일단 입력은 키 순서대로 들어온다는 것을 이용하는것이 가장 중요한 것 같습니다.

 

- 즉 입력순으로 처리를 하는데 나보다 뒤에 들어오는 사람들은 나보다 큰사람들이라는 것을

 

- 생각하는것이 중요합니다.

 

<코드>

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

백준 1439 [C++]  (0) 2020.10.16
백준 1969 : DNA  (0) 2020.03.24
백준 1049  (0) 2020.02.23
백준 1946  (0) 2020.02.23
백준 1120  (0) 2020.02.23

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

 

1049번: 기타줄

첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주어진다. 가격은 0보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

- 하..... 1시간 가량 헤매였습니다... 화가..나요..

 

- 일단 처음 했던 큰 오류..... 한 브랜드에서 구매할 필요가 없습니다.

 

- 즉 a라는 브랜드에서 패키지를 사고 낱개는 또 b라는 브랜드에서 사도 된다는 뜻....

 

- 그러므로 그냥 연산 하기 전에 min_setprice와 min_oneprice를 구해놓고 시작하면 됩니다.....

 

- 그 후에는 그런게 있습니다 예시 에도 있지만

 

- 만약 12 3 이라는 입력이라고 치면 낱개가 4개 이상인경우 그냥 세트 한개를 사는게 더 이득인 경우가 있습니다.

 

- 그리고 만약 세트보다 낱개 6개를 사는경우가 이득인 이상한경우도 있을 수 있습니다 이를 고려해주면 됩니다.

 

- 그리고 지금 까지 전 코딩 할 때 min을 잘 사용하지 않고 왠만하면 다 구현하여서 했었는데....

 

- 이문제를 풀면서 min을 잘쓰면 참 편리하긴 하구나 라고 느끼긴 했습니다.....

 

- 그리고 !!! 문제가 너무 불친절 합니다... 문제만 읽고서는 오해하게 될 여지가 너무 많습니다.... 물론 제생각....

 

<코드>

 

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

백준 1969 : DNA  (0) 2020.03.24
백준 1138  (0) 2020.02.28
백준 1946  (0) 2020.02.23
백준 1120  (0) 2020.02.23
백준 1541  (0) 2020.02.20

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

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성적, 면접 성적의 순위가 공백을 사이에 두고 한 줄에 주어진다. 두 성적 순위는 모두 1위부터 N위까지 동석차 없이 결정된다고 가정한다.

www.acmicpc.net

1. 첫 번째는 입력은 순위 입니다(점수가 아님)  --조심 !

 

2. 전 첫번째 제출한 코드는 시간초과가 되었습니다. 당연한 것이 최악의경우를 생각해보면

 

   입력을 고려해 보았을 떄 10000000000 이는 약 1억번 연산이 1초라고 계산해보면

 

   당연히 시간초과가 나올 수 밖에 없겠죠.

 

3. 그래서 우선 서류점수로 오름차순 정렬을 한후

   

   반복문을 돌리는데 이때는 전체를 다 탐색할 필요가 없이 본인보다 서류점수 우선순위가 높은 사람들

    (즉 본인보다 낮은 index)

   의 면접점수만 확인 하면 되기 때문에 입력이 커질경우 연산 횟수를 대폭 줄일 수 있습니다.

 

** 그리고 저 같은 경우 vector를 사용하였는데 시간적 측면에서 더 단축 하고 싶다면

    그냥 max값을 define 하여 그만큼의 배열을 잡아 버리는 것이 시간적 측면에서는 더 이득인 것 같더라구요 !

 

<시간초과 코드>

 

<맞춘 코드>

 

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

백준 1138  (0) 2020.02.28
백준 1049  (0) 2020.02.23
백준 1120  (0) 2020.02.23
백준 1541  (0) 2020.02.20
백준 2875  (0) 2020.02.11

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/2875

 

2875번: 대회 or 인턴

문제 백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다. (왜인지는 총장님께 여쭈어보는 것이 좋겠다.) 백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 그런데 올해에는 대회에 참여하려는 학생들 중 K명을 반드시 인턴쉽 프로그램에 참여하라는 학교의 방침이 생기게 되었다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다. 백준대학교에서는 뛰어난 인재들이 많기 때문

www.acmicpc.net

- 흠... 문제 이해는 어렵지 않습니다만

 

- 일단 비율에 맞춰서 팀을 구성하고 남은 인원을 먼저 인턴쉽에 보내는 느낌(K에서 뺀다..)

 

-그리고 그럼에도 불구하고 인턴쉽에 인원을 더 보내야 할때는 팀에서 하나씩 빼는 수 밖에 없다.

 

-먼저 방향을 정하고 코드를 짰는데... 계속 틀렸습니다. 가 뜨길래 

 

-반례를 생각 해보다가 666을 했을때 2팀이 나와야 되는데 1팀이 결과로 나오는 것이였습니다.

 

-그래서 차근차근 계산해보니 코드를 잘 못 짰었다죠......

(말하자면 1명이 부족해도 2명이 부족해도 1팀이 빠져서 -1을 해놓았는데 3명이 부족할때는 K/3이 1이되면서

총 -2가 되는 코드를 짜놓고 있었던 것.....)

 

<필기>

<코드

>

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

백준 1120  (0) 2020.02.23
백준 1541  (0) 2020.02.20
백준 10610  (0) 2020.02.10
백준 2217  (0) 2020.02.10
백준 1931  (0) 2020.02.05

+ Recent posts