15.1주차
SevenSeg 클래스 만들기
SevenSegment를 구현하는 클래스를 만드는 문제이다.
---
| |
---
| |
---
SevenSeg 클래스는 0부터 9만 구현을 하는 문제이고 SevenSegs 클래스는 모든 양의 정수를 구현하는 문제이다.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
class SevenSeg
{
private:
int n;
char seg[15];
void Set();
public:
SevenSeg(int n);
friend ostream &operator<<(ostream &os, SevenSeg &ss);
};
/* SevenSeg 정의 */
SevenSeg::SevenSeg(int n)
{
this->n = n;
Set();
}
void SevenSeg::Set()
{
// 숫자를 이쁘게 만들어주기 위한 빈 공간
seg[0] = ' ';
seg[2] = ' ';
seg[4] = ' ';
seg[6] = ' ';
seg[8] = ' ';
seg[10] = ' ';
seg[12] = ' ';
seg[14] = ' ';
if (n == 0 || n == 2 || n == 3 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9)
seg[1] = '-';
else
seg[1] = ' ';
if (n == 0 || n == 4 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9)
seg[3] = '|';
else
seg[3] = ' ';
if (n == 0 || n == 1 || n == 2 || n == 3 || n == 4 || n == 7 || n == 8 || n == 9)
seg[5] = '|';
else
seg[5] = ' ';
if (n == 2 || n == 3 || n == 4 || n == 5 || n == 6 || n == 8 || n == 9)
seg[7] = '-';
else
seg[7] = ' ';
if (n == 0 || n == 2 || n == 6 || n == 8)
seg[9] = '|';
else
seg[9] = ' ';
if (n == 0 || n == 1 || n == 3 || n == 4 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9)
seg[11] = '|';
else
seg[11] = ' ';
if (n == 0 || n == 2 || n == 3 || n == 5 || n == 6 || n == 8)
seg[13] = '-';
else
seg[13] = ' ';
}
ostream &
operator<<(ostream &os, SevenSeg &ss)
{
// for (int i = 0; i < 15; i++)
// {
// if (i % 3 == 0)
// {
// os << endl;
// }
// os << ss.seg[i];
// }
int k = 0;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 3; j++)
{
os << ss.seg[k++];
}
os << endl;
}
return os;
}
int main()
{
int n;
cin >> n;
SevenSeg s(n);
cout << s;
}
main
int main()
{
int n;
cin >> n;
SevenSeg s(n);
cout << s;
}
SevenSegs 클래스 만들기
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
class SevenSegs;
class SevenSeg
{
private:
int n;
char seg[15];
void Set();
public:
SevenSeg(int n);
friend ostream &operator<<(ostream &os, SevenSeg &ss);
friend ostream &operator<<(ostream &os, SevenSegs &ss);
};
class SevenSegs
{
private:
int n;
vector<SevenSeg> segs;
void Set();
public:
SevenSegs(int n);
friend ostream &operator<<(ostream &os, SevenSegs &ss);
};
/* SevenSeg 정의 */
SevenSeg::SevenSeg(int n)
{
this->n = n;
Set();
}
void SevenSeg::Set()
{
// 숫자를 이쁘게 만들어주기 위한 빈 공간
seg[0] = ' ';
seg[2] = ' ';
seg[4] = ' ';
seg[6] = ' ';
seg[8] = ' ';
seg[10] = ' ';
seg[12] = ' ';
seg[14] = ' ';
if (n == 0 || n == 2 || n == 3 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9)
seg[1] = '-';
else
seg[1] = ' ';
if (n == 0 || n == 4 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9)
seg[3] = '|';
else
seg[3] = ' ';
if (n == 0 || n == 1 || n == 2 || n == 3 || n == 4 || n == 7 || n == 8 || n == 9)
seg[5] = '|';
else
seg[5] = ' ';
if (n == 2 || n == 3 || n == 4 || n == 5 || n == 6 || n == 8 || n == 9)
seg[7] = '-';
else
seg[7] = ' ';
if (n == 0 || n == 2 || n == 6 || n == 8)
seg[9] = '|';
else
seg[9] = ' ';
if (n == 0 || n == 1 || n == 3 || n == 4 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9)
seg[11] = '|';
else
seg[11] = ' ';
if (n == 0 || n == 2 || n == 3 || n == 5 || n == 6 || n == 8)
seg[13] = '-';
else
seg[13] = ' ';
}
ostream &
operator<<(ostream &os, SevenSeg &ss)
{
// for (int i = 0; i < 15; i++)
// {
// if (i % 3 == 0)
// {
// os << endl;
// }
// os << ss.seg[i];
// }
int k = 0;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 3; j++)
{
os << ss.seg[k++];
}
os << endl;
}
return os;
}
/* SevenSegs 정의 */
SevenSegs::SevenSegs(int n)
{
this->n = n;
Set();
}
void SevenSegs::Set()
{
for (int k = n; k > 0; k /= 10)
{
SevenSeg temp(k % 10);
segs.push_back(temp);
}
}
ostream &
operator<<(ostream &os, SevenSegs &ss)
{
int k = 0;
for (int i = 0; i < 5; i++)
{
for (int j = ss.segs.size() - 1; j >= 0; j--)
{
for (int l = 0; l < 3; l++)
{
os << ss.segs[j].seg[k + l];
}
}
k += 3;
os << endl;
}
return os;
}
int main()
{
int k;
cin >> k;
SevenSegs ss(k);
cout << ss;
}
🌟 SevenSeg 클래스를 elem을 가지고 있는 segs 벡터를 출력하는 과정 잘보기 !
main
int main()
{
int k;
cin >> k;
SevenSegs ss(k);
cout << ss;
}
Puzzle
0의 위치를 입력 받은 u, d, r, l대로 이동을 하다가
1 2 3
4 5 6
7 8 0
이 되면 코드를 종료시키는 문제이다.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
/* for rand() */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
using namespace std;
class notMovable
{
};
class Puzzle
{
private:
int cell[9];
int x, y;
void shuffle();
int convert(int x, int y); // 2차원을 1차원으로 바꾸어주는 함수
public:
Puzzle();
void move(char c);
bool isDone();
friend ostream &operator<<(ostream &os, Puzzle &pz);
};
/* Puzzle 정의 */
Puzzle::Puzzle()
{
for (int i = 0; i < 8; i++)
{
cell[i] = i + 1;
}
cell[8] = 0;
x = 2;
y = 2;
shuffle();
}
// cell이 초기화될 때, 0의 위치를 랜덤으로 놓는 함수.
void Puzzle::shuffle()
{
srand(time(NULL));
int rn;
for (int i = 0; i < 4; i++)
{
rn = rand() % 4;
try
{
switch (rn)
{
case 0:
move('u');
break;
case 1:
move('d');
break;
case 2:
move('l');
break;
case 3:
move('r');
break;
}
}
catch (notMovable &e)
{
}
}
}
// 2차원 좌표를 1차원 좌표로 바꾸어주는 함수
int Puzzle::convert(int x, int y)
{
return 3 * y + x;
}
// 이동
void Puzzle::move(char c)
{
int to, from;
switch (c)
{
case 'u':
if (y == 0)
throw notMovable();
to = convert(x, y - 1);
from = convert(x, y);
cell[from] = cell[to];
cell[to] = 0;
y--;
break;
case 'd':
if (y == 2)
throw notMovable();
to = convert(x, y + 1);
from = convert(x, y);
cell[from] = cell[to];
cell[to] = 0;
y++;
break;
case 'r':
if (x == 2)
throw notMovable();
to = convert(x + 1, y);
from = convert(x, y);
cell[from] = cell[to];
cell[to] = 0;
x++;
break;
case 'l':
if (x == 0)
throw notMovable();
to = convert(x - 1, y);
from = convert(x, y);
cell[from] = cell[to];
cell[to] = 0;
x--;
break;
default:
throw notMovable();
}
}
// (2, 2)자리에 0이 오면 Done을 한다.
bool Puzzle::isDone()
{
for (int i = 0; i < 8; i++)
{
if (cell[i] != i + 1)
{
return false;
}
}
if (cell[8] = 0)
return false;
return true;
}
ostream &operator<<(ostream &os, Puzzle &pz)
{
int k = 0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
os << pz.cell[k++] << ' ';
}
os << endl;
}
return os;
}
int main()
{
Puzzle mypuzzle;
cout << mypuzzle;
while (!(mypuzzle.isDone()))
{
char c;
cout << "Choice movement: ";
cin >> c;
try
{
mypuzzle.move(c);
cout << mypuzzle;
}
catch (notMovable &e)
{
}
}
cout << "It's done" << endl;
}
댓글남기기