📋 개요
하루정도 휴식기를 갖고 감잡기 문제 Silver문제를 풀기로 했다. 일단 낮은 난이도의 단계부터 천천히 올라가야겠다. 저번에 푼 브1문제 이후로는 막힘없이 풀고 있다. 이번 풀이에도 걸린 시간은 30min 정도였다.
이번에는 문자열과 구현 문제였다. cin으로 개행문자(\n)인 제거하기 부터 공백있는 문자열 받기와 같은 입력과 같은 문제도 나왔다.
🧩 문제
https://www.acmicpc.net/problem/1380
📝 형식
📥 입력 | 📤 출력 |
입력은 번호를 가진 시나리오들로 구성됩니다. 시나리오 번호는 1부터 순서대로 증가하고, 각 시나리오는 아래의 내용을 포함합니다.
|
시나리오 번호와 귀걸이를 돌려받지 못한 여학생의 이름을 공백으로 구분하여 한 줄씩 출력하십시오. |
💡 예제
🔢 번호 | 📥 입력 | 📤 출력 |
1 | 3 Betty Boolean Alison Addaway Carrie Carryon 1 B 2 A 3 B 3 A 1 A 2 Helen Clark Margaret Thatcher 1 B 2 B 2 A 0 |
1 Alison Addaway 2 Helen Clark |
🥕 내 코드가 정답코드
📖 해설 및 느낀점
# 구현
아이디어는 그렇게 어렵지 않았다. 문제를 자세히 읽어보면 알겠지만 어찌되었던 한명의 여학생만 귀걸이를 받지못한다(2n-1에, 여학생 번호는 최대 2번까지 등장)
이러한 조건때문에 t/f로 풀어도 풀린다. 여학생의 수를 주어진 제한사항인 101로 array를 만들어서 기본을 false로 두고 한번 들어오면 true, 두번 들어오면 false로 해서 다시 원상태로 돌려두면 true인 여학생이 딱 한명이 나오게 된다.
문제 지문중에 "A,B를 마음대로 선택한다"라는게 있는데 그래서 그런건지 모르겠는데 A,B에 대한 flag는 받기만하지 굳이 사용할 필요가 없었다. 충분히 t/f로 풀이할 수 있는 문제라고 생각했다.
일단, STL 컨테이너에 의존하지 않고 풀이하려고 노력 중이다.
# C++ 문법
cin.ignore(); //개행처리!!
for(int i = 1 ; i <= n ; i ++){
string student;
getline(cin, student); //string형을 받을때 사용
sArr[i] = student;
}
/*
cin.ignore() 개행문자(\n)을 무시한다. 내가 작성하면서 발생한 오류는 아래와 같다.
ex)
3 (\n)
Betty Boolean
Alison Addaway
Carrie Carryon
1 B
2 A
3 B
3 A
1 A
0
3이라는 인원수를 받는 n다음에 개행문자가 포함되어있어 아래에 이름들을 문자열을 위한
배열에 담을때 처음 인덱스에 \n라인이 포함되어있어서 이름을 받을때 한칸씩 밀렸다.
이를 해결하기위해 cin.ignore()로 직전에 들어온 개행문자를 무시한다.
*/
/*
cin은 자체적으로 구분자를 공백(" ")으로 처리해서 입력을 받지 않는다.
ex) input: Betty Boolean / output: Betty
하지만 문제에서 사용자의 fullname을 입력 받아야했기때문에 내가 원하는 값은 아래와 같다.
ex) input: Betty Boolean / output: Betty Boolean
getline은 구분자를 공백(" ")이 아닌 개행문자(\n)로 구분자를 사용한다.
*/
반응형
'Algorithm > Problem' 카테고리의 다른 글
[BOJ]1059 좋은구간(S4, C++) (0) | 2024.03.07 |
---|---|
[BOJ]1057 토너먼트(S4, C++) (0) | 2024.03.07 |
[BOJ]1524 뒤집힌 덧셈(B1, C++) (0) | 2024.02.23 |
[BOJ]1524 세준세비(B1, C++) (0) | 2024.02.23 |
[BOJ]1292 쉽게 푸는 문제(B1, C++) (0) | 2024.02.22 |