Nestjs 튜토리얼 따라하기 3편

Nestjs 튜토리얼 따라하기 3편

Providers

Providers

  • Provider는 종속성을 주입하는 기능을 수행함
  • @Injectable() 데코레이터를 사용
# scr폴더 내에 cats폴더 생성
nest g service cats



위 명령어를 이용하여 프로젝트를 생성하면 다음과 같은 구조를 가진다.

├── src
│   ├── app.controller.ts
│   ├── app.module.ts
│   ├── main.ts
│   └── cats
│       └── cats.service.ts



cats.service.ts에 다음과 같은 코드를 입력한다.

// cats.service.ts
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';

@Injectable()
export class CatsService {
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
    this.cats.push(cat);
  }

  findAll(): Cat[] {
    return this.cats;
  }
}

이를 사용하기 위해서 CatsController에 연결해준다.

// cats.controller.ts
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CreateCatDto } from './dto/create-cat.dto';
import { CatsService } from './cats.service';
import { Cat } from './interfaces/cat.interface';

@Controller('cats')
export class CatsController {
  constructor(private catsService: CatsService) {}

  @Post()
  async create(@Body() createCatDto: CreateCatDto) {
    this.catsService.create(createCatDto);
  }

  @Get()
  async findAll(): Promise<Cat[]> {
    return this.catsService.findAll();
  }
}

생성자를 통하여 catsService를 선언하고 catsService에 선언된 함수를 사용하였다.



CatsService, CatsController를 정의하였으므로 이를 수행할 수 있도록 module에 등록하여야 한다.

// app.module.ts
import { Module } from '@nestjs/common';
import { CatsController } from './cats/cats.controller';
import { CatsService } from './cats/cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class AppModule {}

[C++] AtCoder Beginner Contest 188 C번 ABC Tournament

AtCoder Beginner Contest 188 B번 ABC Tournament

문제

https://atcoder.jp/contests/abc188/tasks/abc188_c abc188_c

풀이

길이가 2^N인 수열 N이 있고 수열 N은 i번째 플레이어의 레이팅을 나타낸다고 했을 때

모든 플레이어가 토너먼트식으로 진행을 할 때 2등을 하는 플레이어는 누군지 선택하는 문제

토너먼트로 진행이 되므로 결승전은 수열 N을 반으로 나누어 만든 두 그룹 중, 앞 그룹 중 1등 vs 뒷 그룹 중 1등의 결승 대진이 확정된다.

결승전에서 진 플레이어가 2등이므로 해당 플레이어의 인덱스를 출력하면 정답

코드

#pragma warning(disable : 4996)
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<ll> vll;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pld;
typedef tuple<ll, ll, ll> tl3;
#define FOR(a, b, c) for (int(a) = (b); (a) < (c); ++(a))
#define FORN(a, b, c) for (int(a) = (b); (a) <= (c); ++(a))
#define rep(i, n) FOR(i, 0, n)
#define repn(i, n) FORN(i, 1, n)
#define tc(t) while (t--)
// https://atcoder.jp/contests/abc188/tasks/abc188_c
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll n;
    cin >> n;
    vll a(pow(2,n));
    for(int i = 0;i<pow(2,n);i++){
        cin >> a[i];
    }
    ll max1 = 0, max2 = 0;
    ll idx1 = 0, idx2 = 0;
    for(int i = 0;i<a.size()/2;i++){
        if(max1 < a[i]){
            max1 = a[i];
            idx1 = i+1;
        }
    }
    for(int i = a.size()/2;i<a.size();i++){
        if(max2 < a[i]){
            max2 = a[i];
            idx2 = i+1;
        }
    }
    if(max1 > max2) cout << idx2;
    else cout << idx1;

    return 0;
}

[C++] AtCoder Beginner Contest 188 B번 Orthogonality

AtCoder Beginner Contest 188 B번 Orthogonality

문제

https://atcoder.jp/contests/abc188/tasks/abc188_b abc188_b

풀이

길이가 n인 수열 A와 B가 있을때 ss 의 합이 0이면 Yes 아니면 No를 출력

코드

#pragma warning(disable : 4996)
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<ll> vll;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pld;
typedef tuple<ll, ll, ll> tl3;
#define FOR(a, b, c) for (int(a) = (b); (a) < (c); ++(a))
#define FORN(a, b, c) for (int(a) = (b); (a) <= (c); ++(a))
#define rep(i, n) FOR(i, 0, n)
#define repn(i, n) FORN(i, 1, n)
#define tc(t) while (t--)
// https://atcoder.jp/contests/abc188/tasks/abc188_b
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll n;
    cin >> n;
    vll a(n), b(n);
    ll res = 0;
    rep(i,n){
        cin >> a[i];
    }
    rep(i,n){
        cin >> b[i];
    }
    rep(i,n){
        res += (a[i] * b[i]);
    }
    if(res == 0){
        cout << "Yes";
    }
    else cout << "No";

    return 0;
}

[C++] AtCoder Beginner Contest 188 A번 Three-Point Shot

AtCoder Beginner Contest 188 A번 Three-Point Shot

문제

https://atcoder.jp/contests/abc188/tasks/abc188_a abc188_a

풀이

농구를 하는데 현재 스코어가 X-Y 라고 한다면, 3점슛 한번으로 역전을 할 수 있는지 없는지 판별하는 문제

두 점수의 차가 2 이하가 되면 Yes, 그렇지 않으면 No를 출력한다.

코드

#pragma warning(disable : 4996)
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<ll> vll;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pld;
typedef tuple<ll, ll, ll> tl3;
#define FOR(a, b, c) for (int(a) = (b); (a) < (c); ++(a))
#define FORN(a, b, c) for (int(a) = (b); (a) <= (c); ++(a))
#define rep(i, n) FOR(i, 0, n)
#define repn(i, n) FORN(i, 1, n)
#define tc(t) while (t--)
// https://atcoder.jp/contests/abc188/tasks/abc188_a
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll x,y;
    cin >> x >> y;
    if(abs(x-y) <= 2) cout << "Yes";
    else cout << "No";

    return 0;
}

[C++] AtCoder Beginner Contest 187 D번 Choose Me

AtCoder Beginner Contest 187 D번 Choose Me

문제

https://atcoder.jp/contests/abc187/tasks/abc187_d abc187_d

풀이

타카하시가 투표에서 이기려면 연설을 최소 몇번해야하는지 묻는 문제

x를 타카하시 투표수 - 아오키 투표수 라고 한다면 x는 i번 마을을 방문할 때 마다 2Ai+Bi 씩 증가함 x > 0 이 성립된다면 그때부터는 타카하시가 더 많은 득표를 할 수 있게 된다.

코드

#pragma warning(disable : 4996)
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<ll> vll;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pld;
typedef tuple<ll, ll, ll> tl3;
#define FOR(a, b, c) for (int(a) = (b); (a) < (c); ++(a))
#define FORN(a, b, c) for (int(a) = (b); (a) <= (c); ++(a))
#define rep(i, n) FOR(i, 0, n)
#define repn(i, n) FORN(i, 1, n)
#define tc(t) while (t--)
// https://atcoder.jp/contests/abc187/tasks/abc187_d
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll n;
    cin >> n;
    vll x(n);
    ll temp = 0;
    ll ans = 0;
    rep(i,n){
        ll a,b;
        cin >> a >> b;
        temp -= a;
        x[i] = a+a+b;
    }
    sort(all(x));
    while(temp <= 0){
        temp += x.back();
        x.pop_back();
        ans++;
    }
    cout << ans;

    return 0;
}