본문 바로가기

코딩테스트/c++

(20)
[백준] 1406번 에디터 문자를 계속해서 수정하므로 배열보다는 연결 리스트로 구현하는 것이 낫다고 생각했다. 리스트를 선언한 후 커서 위치를 설정했다. 위에서 커서 위치에 따른 iterator는 커서의 오른쪽에 위치한다. 예를 들어, abcd를 입력한 후 L을 입력하면 커서는 왼쪽으로 간다. 이때 iterator는 d를 가리키고 있다. 따라서 명령을 수행할 때 커서의 오른쪽에 있는 iterator를 기준으로 코드를 작성하면 된다. 명령어 'L'의 경우 커서가 문장의 맨 앞에 위치할 경우 continue를 했다. 커서가 문장의 맨 앞에 있으면 iterator는 editor.begin() 보다 한 칸 뒤에 있으므로 조건문을 위와 같이 설정했다. 나머지 명령어도 위와 같은 개념으로 구현하면 된다. 전체 코드 #include using..
백준 c++ 1697번 문제 설명 점에 대한 위치를 1차원 배열로 나타낸다. 수빈이의 위치를 N에 넣고 동생의 위치를 K에 넣는다. Q는 수빈이가 갈 수 있는 위치를 저장하는 큐다. 큐에서 값을 뺀 후 수빈이의 위치가 동생의 위치면 함수를 종료시킨다. 수빈이가 갈 수 있는 위치는 총 3가지인데 현재 거리로부터 +1, -1, *2 이다. 그래서 for문과 if문을 사용하여 경우의 수를 나누었다. 각각의 경우에 대한 예외처리를 해준 후 배열에 값을 1씩 더해준다. 전체 코드 #include #include #include using namespace std; int dist[100001]; int main() { ios::sync_with_stdio(0); cin.tie(0); int N, K; cin >> N >> K; queu..
백준 c++ 2178번 board는 미로의 크기를 나타내는 배열, vis는 해당 지점을 방문했는지 나타는 배열, length는 시작 지점에서부터 해당 지점까지의 거리를 나타낸다. n, m은 미로의 세로와 가로의 길이를 나타내고 한 줄씩 string 값을 입력받아 board에 저장한다. 첫번째 (0,0)을 큐에 넣고 vis[0][0]을 1로 바꾸고 이중for문을 사용하여 length 배열의 값들을 넣어준다. 마지막에 1을 더한 이유는 length에 저장되어 있는 값은 거리값이고 해당 문제에서 요구하는 것은 이동한 칸의 갯수이므로 +1을 해준다. 전체코드 #include #include #include using namespace std; #define X first #define Y second int board[101][101..
백준 c++ 1926번 board는 도화지의 크기를 나타내고 vis는 해당 위치를 방문했는지 나타내고 width에는 각각 그림의 크기를 저장해놓는다. 도화지의 세로 크기와 가로 크기 n, m을 입력 받고 도화지에 그림의 정보를 입력한다. 이중 for문을 통해 도화지에 그림이 있는지 확인하고 만약 해당 위치에 방문하지 않았고 도화지에 그림이 있다면 if문으로 들어가 방문했다고 표시를 한 후 큐에 해당 위치를 넣고 count 값을 1 더한다. 그러고 해당 위치로부터 상,하,좌,우 연결된 그림이 있는지 확인한다. 마지막으로 width 배열을 내림차순으로 정렬한 후 가장 큰 width[0]을 출력한다. 전체 코드 #include #include #include using namespace std; #define X first #def..