전체 글 129

[C#] 문자열 찾기 함수들

항상 문자열의 함수는 자주 사용하지 않거나 경험이 적으면 까먹는 경우가 종종 있습니다. 매번 서치 해서 보는 것도 좋지만.. 따로 정리를 해두면 어떨까 해서 자료들을 모아 정리해보겠습니다. C#에서는 string에 대해서 여러 가지 다양한 문자열 찾기 함수를 지원하고 있습니다. # IndexOf() : 현재 문자열에서 찾고자 하는 지정된 문자 혹은 문자열의 위치를 앞에서부터 찾아서 반환합니다. 해당하는 부분이 없으면(존재하지 않으면) -1을 리턴합니다. 중요한 점은 맨 처음 발견되는(시작되는) 인덱스를 보고한다는 점입니다. string str = "Hello, World!"; int a = str.IndexOf('W'); // 7 int b = str.IndexOf("rld!"); // 9 int c =..

CS/C# 2021.12.10

[C#] var

[ var ] var에 대해서 정리해봅시다! C++에서도 'auto'라는 키워드가 있었는데, C#에서도 'auto'와 비슷한 기능을 하는 'var'가 존재합니다. var a = 3; var b = "string"; var를 사용해서 변수를 선언하면 컴파일러가 자동으로 해당 변수의 형식을 지정해줍니다. 이러한 키워드는 왜 사용하는지 항상 의문이 들었는데, 변수의 형식이 긴 경우에 간단하게 해 준다는 장점이 있습니다. C++에서는 iterator 같은 형식을 지정할 때 생각보다 길게 되는데 이러한 형식을 줄여주는 것처럼 말이죠. vector v; vector::iterator iter = v.begin(); // 간단해진 타입명 auto iter = v.begin(); vector v2; for(auto i..

CS/C# 2021.12.10

[백준 1120] 문자열

[문제풀이] 문자열 A와 문자열 B가 주어졌을 때, 항상 A의 길이는 B의 길이보다 작거나 같은 조건에서 입력으로 주어졌을 때 A와 B의 길이가 같으면서도, A와 B의 차이를 최소가 되도록 하는 방법을 구하는 문제입니다. 채워 넣을 때는 아무거나 알파벳을 넣되 앞에서 넣나 뒤에서 넣나 최선의 방법으로 넣어야 우리는 최소의 경우를 구할 수 있습니다. 최선의 경우가 아니면 더 많은 방법으로 돌아가겠죠. 간단하게 주어진 입력에 대해서 비교를 하면 쉽습니다. 어처피 채워 넣는 건 최선의 방법으로 채워 넣기 때문에 기존에 입력된 부분의 차이만 구하면 그 차이가 바로 최소의 차이이기 때문입니다. A : adaabc B : aababbc 어릴 때 모양이 여러 조각 난 판이 있을 때 그 모양에 끼워넣기 위해서 이리저리..

Algorithm 2021.12.09

[백준 2960] 에라토스테네스의 체

문제 풀이 기존의 에라토스테네스의 체에서 약간 변형의 문제입니다. 보통은 소수를 제외하고 그 소수의 배수를 모두 지우는 형태가 에라토스테네스의 체 구현이지만, 이 문제에서 요구하는 건 소수를 찾았을 때도 제거하고 그의 배수들도 모두 제거하면서 지나갑니다. N = 7, K = 3이면 제거하는 순서를 나열하면 다음과 같습니다. 2 4 6 (2의 배수) 3 (3의 배수) 5 (5의 배수) 7 (7의 배수) 따라서 3번째 제거된 수는 6입니다. 중복되는 수를 제거 방지를 위해서 prime변수를 선언해서 제거했더라면 false로 시키고 카운팅 합니다. 카운팅 횟수가 K번째와 같게 된다면 그때가 바로 K번째로 제거된 수입니다. #include #include #include using namespace std; i..

Algorithm 2021.12.07

[백준 7568] 덩치

문제 풀이 덩치를 정하는 방법은 (a1, b1) (a2, b2)가 있을 때 a1 > a2 이면서 b1 > b2 이면 앞에 있는 사람이 뒤에 있는 사람보다 덩치가 크다는 의미입니다. 그런데 덩치를 정할 수 없는 순간이 있다면 등수는 모두 같은 것으로 치고, 자신보다 앞에 있는 덩치가 N명이라면 자신의 등수는 N+1로 설정하면 됩니다. N의 크기가 엄청 작기 때문에 완전 탐색으로 모든 경우의 수를 돌려 자신보다 덩치가 큰 녀석들만 카운트합니다. 최종적으로 자신의 등수는 카운트 + 1로 설정합니다. 자신보다 더 큰 덩치가 없다면 자신이 제일 크기 때문에 1등으로 처리해야 되기 때문이죠. #include #include using namespace std; int main() { ios_base::sync_wi..

Algorithm 2021.12.07

[C#] foreach

이번에는 foreach문에 대해서 공부해보겠습니다. foreach 문이 왜 등장했을까요? 기존에 for, while, do~while 문으로 대체가 가능한데.. 그러다가 어떤 한 블로그의 말을 듣고 납득이 되었습니다. 그 말은 foreach문은 index범위를 벗어나는 위험성이 없다는 것입니다. 무슨말이냐면, 배열이나 컬렉션의 끝에 도달하면 자동으로 반복이 종료하게 되는데요. 만약에 foreach문을 사용하지 않고 기존에 알고 있었던 for문을 이용해서 구현했더라면 프로그래머의 실수로 인해 할당되지 않은 영역을 참조하는 경우가 발생할 수 있습니다. 이러한 경우가 바로 IndexOutOfRangeException 입니다. 정확히는 해당 범위 외부에 있는 인덱스를 사용해서 배열 또는 컬렉션의 요소에 액세스하..

CS/C# 2021.12.05

[C#] null 병합 연산자, ??

null 병합 연산자란? null 병합 연산자는 ?? 입니다. ?? 는 null 조건부 연산자처럼 객체나 변수의 null 검사를 간결하게 해 줍니다. 두 개의 피연산자를 받아들이고 왼쪽 피연산자가 null이라면 오른쪽 피연산자를 반환합니다. 왼쪽 피연산자가 null이 아니라면 왼쪽 피연산자를 반환합니다. 이번에 C#을 공부하면서 느낀 건 null과 관련된 형식에는? 기호가 들어갑니다. Nullable, ?. , ?[]도?로 시작합니다. C, C++에서는 경험하지 못한 새로운 문법입니다. 말보다는 한 번 보는 것이 이해가 잘 된다고 생각합니다. int? num = null; Console.WriteLine($"{num ?? 0}"); // num이 null이기 때문에 0이 출력됩니다. string str ..

CS/C# 2021.12.05

[백준 3009] 네 번째 점

문제 풀이 알고 보면 쉬운 문제이지만, 생각보다 오래 걸렸습니다. 3개의 점이 주어졌을 때, 좌표 상에서 직사각형을 만들기 위해 남은 나머지 점을 출력하는 문제입니다. 처음에는 각 점 사이의 거리를 구해서 두 개의 거리를 이용해 좌표를 찾으려고 했지만 너무 많은 계산이 들어가서 다시 생각해봤습니다. 연관점을 찾다 보니 x좌표, y좌표마다 2개씩 같고, 1개씩은 따로 노는 점을 발견했습니다. 1개씩 짝이 없는 좌표가 바로 우리가 찾는 네 번째 점이라는 점을 착안하여 map을 이용해서 짝의 개수를 카운트했고, 짝이 없는 좌표만 저장해서 출력하는 방법으로 풀었습니다. 이후에 다른 풀이를 봤는데, 더 간단한 방법이 있었습니다. x1, x2, x3 y1, y2, y3 이렇게 주어졌을 때 x1 == x2 이면, x..

Algorithm 2021.12.05