본문 바로가기

백준

[뒤집기] 1439번, 최소 뒤집기 구하기(2) 1. 문제 요약 /* * 문제 : 0과 1로 이뤄진 문자열에서 전부 0 또는 1로 바꾸는 상황 * 조건 - 0이나 1 둘중 하나로만 이뤄진 문자열로 변환 - 뒤집기 연산도 0 또는 1 둘 중 하나로 수행됨 - 문자열 길이는 100만이 최대 * 출력 : 뒤집은 횟수 출력 */ 2. 풀이 (1) 0 또는 1로 이뤄진 집합 개수가 몇 개냐 순차 순회를 하면서, 연속적으로 나타나면 카운트 수를 늘리지 않음. "0->1, 1->0으로 변환된 지점 수를 셈" (2) 변수 inver_last 역할 문자열 마지막 지점에 이전과 다른 값 하나가 나올 경우 카운트가 하나 덜 이뤄지는 문제점. 그래서 마지막 지점과 inverse 지점이 하나 더 있는 것으로 알려줌. 3. 다른 사람의 잘난 코드 (1) "달라지는 구간 개수/..
[뒤집기] 1455번, 최소 뒤집기 구하기(1) 1. 문제 요약 /* 문제 : 동전이 모두 앞면(0)이 나오도록 뒤집어라 조건 - 한 번 (a, b)를 뒤집으면 (0,0) ~ (a,b) 영역 모두 뒤집힌다 - 뒤집은 횟수는 선택된 (a,b)수와 같다. 출력 : 뒤집은 횟수를 구해라. */ 2. 풀이 /* * 풀이 과정 * "제일 외곽부터 처리" : (우선순쉬1) row가 클수록 -> (우선순쉬2) col이 클수록 * 예시 00 11 00 10 00 01 -> 10 -> 10 ->00 ->00 * 직렬화시 : 0001 1110 0010 1000 0000 */ (1) 맨 끝에서 부터 처리 한 번 뒤집을 때 (a, b) 지점까지 다 뒤집히므로, 제일 바깥쪽 영역부터 순회하면서 (0, 0)을 시행합니다. (2) 다음 순회 지점 우선 순위 : 같은 열이면 큰 ..
[문자열 처리] 1764번, 단어간 중복을 찾아라 1. 풀이 두 개의 입력 집합이 주어졌고, 이 집합간의 중복된 단어를 구해라. -> 하나의 집합에서 중복된 문자를 찾는 문제로 생각. (1) 전처리 namelist에 두 집합 내용을 저장해놨고, "알파벳 순으로 정렬" (2) 로직 1번 정렬이 되었기 때문에 "현재와 바로 뒤의 문자만 비교하면 됨" 동일한 값이면, 다음번에 찾아볼 단어는 점프시켜서 본다. 2. Github 코드
[문자열 처리] 1152번, 단어 수 세기 /* 주의 사항 (1) 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다. (2) 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다. (3) 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. */ 1. 풀이 (1) 공백을 찾으면 되었던 문제. "apple fine apple"도 결과는 3 "로직 (1) : 단어 3개 사이에는 공백이 2개이므로", 공백 + 1 = 결과값 (2) 문제에서 나올 수 있는 입력 케이스, case1 : 공백 case2 : 공백 + {단어 N} case3 : 공백 + {단어 N} + 공백 case4 : {단어 N} 단어가 3개라서 공백이 2개라는 로직은 case4번만 해결가능. 나머지 case1~3 케이스를 처리하기 위한 예외처리 필요했음...