ComputerScience/PS 5

[Programmers] 완주하지 못한 선수

간만에 문제풀이를 위해 들어갔는데.. 바보가 된 느낌이다 전에는 이렇게 안풀었겠지만 오랜만에 c++을 만지면서 STL사용이 너무 어색해져서 답을 알면서 구현을 못하는 말도 안되는 상황까지 온듯하다... 반성하자.. 너무나도 간단한 주제,, 두 string 리스트를 비교해서 중복되지 않는 하나의 string을 뽑아내는 문제였다. 처음에 생각났던 풀이는 HashMap이라는 주제에 맞춰서 Map을 구성해서 비교한 풀이였고 나중에 생각났던 풀이는 좀더 짧고 간단한 풀이였는데 뒤에있는풀이가 좀더 재밌는 풀이인것 같다. 우선 HashMap이라는 주제에 고정시킨 풀이부터 설명해보자면 1. 입력된 string값들을 hashing해서 hashValue, string을 한쌍으로 해서 Map에 집어넣는것을 두 string ..

ComputerScience/PS 2020.07.25

[BOJ] 1027 고층건물

BOJ 1027 고층 건물 https://www.acmicpc.net/problem/1027 이게 처음에 무슨 소리인가.. 문제가 헷갈렸었는데 입력되는 값들을 차트로 표현하니까 이해하기가 쉬워 졌다. 위의 차트에서 볼 수 있듯이 5번 건물에서 다른 건물을 보는 LOS(Line of Sight)를 그었을 때 좌측의 경우에는 4, 3, 2번 건물까지는 볼 수 있지만, 1번 건물의 경우는 2번 건물에 막혀서 볼 수 없고 우측의 경우에는 6, 7, 8번 건물 까지 보고, 9, 10 ,11번 건물을 8번 건물에 막혀서 볼수 없다가, 또 12번 건물은 볼 수 있고, 13, 14, 15번 건물은 12번 건물에 박혀서 볼 수 없는 상황에 놓이게 된다. 특정 건물에 막혀서 볼 수 없다는 말의 의미를 고민해 보면 이 문제..

ComputerScience/PS 2019.04.10

[BOJ] 1011 Fly me to the Alpha Centauri

BOJ 1011 Fly me to the Alpha Centauri https://www.acmicpc.net/problem/1011 이 문제 규칙 찾으려고 노가다로 최소 이동 횟수를 구해보니까 거기에 답이 있었음.. x -> y 거리를 d라고 했을 때 아래와 같은 이동 횟수를 가진다. 위의 (0) ~ (3)까지 나눠 놓은 영역을 보면 d = N^2라고 하면 N^2 값을 기준으로 두 부분으로 나누어 지는 것을 볼 수 있다. 정확히 말하면 [N^2 - N + 1, N^2]와, [N^2 + 1, N^2 + N] 두 부분인데 [N^2 - N + 1, N^2] 범위는 N * 2 -1 [N^2 + 1, N^2 + N] 범위는 N * 2 값을 가지는 것을 알 수 있다. 위의 규칙을 이용해서 작성한 문제의 코드는 아..

ComputerScience/PS 2019.04.10

[BOJ/DP] 1029 그림교환

BOJ 1029 그림교환 https://www.acmicpc.net/problem/1029 이 문제 처음부터 너무 쉽게 생각하고 접근한 것 같다.... 1. 그림을 팔 때, 그림을 산 가격 보다 크거나 같은 가격으로 팔아야 한다. 2. 같은 그림을 두번 이상 사는 것은 불가능하다. 위의 조건 두개 만 보고 여기에 대해서만 조건을 걸어서 DFS 탐색으로 가지치기 대충 하면 맞을 줄 알았는데..;; 여지 없이 시간초과로 FAIL이 난다... N 범위도 15까지밖에 안되서 쉽게 끝날 줄 알았는데... 근데 이게 조건이 하나 더 있다는걸 나중에 알았다는... 입력 조건에 금액에 대한 범위가 지정되어 있어서 거기에 대해서도 방문 조건을 걸어줘야 했다. 아마 금액에 대한 방문 조건을 걸지 않아서 시간 초과가 난게 ..

ComputerScience/PS 2019.04.10

[입/출력] scanf("%s") 로 공백 포함해서 한 줄 입력 받기

문제를 풀다가 문자열 한 줄을 받아야 하는 일이 간혹 생긴다. 이때 scanf("%s", in); 과 같은 형태로 입력을 받을 경우 공백 문자에서 끊겨벼려서 한 줄을 전부 입력받을 수 없게 된다. cin.getline을 사용하는 방법도 있고(C++), gets, fgets를 사용하는 방법(C)이 인터넷에 많이 굴러다니는데 나의 경우에는 문제를 풀 때 scanf말고 다른게 들어가면 헷갈리기 시작해서 잘 안쓰는 편이다.(사실 그냥 위에거 아무거나 쓰면 된다. 그런데 굳이 scanf를 사용해서 한 줄을 입력받기 위해서는 %와 s사이에 정규식을 집어넣어 주면 된다. 간단한거라 외워두면 편할듯 하다. scanf("%[^\n]s", in); 인데 [^\n]이라는 정규식은 그냥 \n(개행 문자)가 나오기 전까지 입력..

ComputerScience/PS 2019.04.10