[지코바] solved.ac CLASS 2 Part 4

상수·2022년 2월 12일
0

2164) 카드2

C++

#include <iostream>
#include <queue>

using namespace std;

void input (int* i) {
  cin >> *i;
}

void print (int o) {
  cout << o << '\n';
}

int main() {
  int n;
  queue<int> cards;
  input(&n);

  for (int i=0; i<n/2; i++) {
    cards.push((i+1)*2);
  }
  
  if (n == 1) {
    print(1);
  } else {
    if (n % 2 != 0) {
      cards.push(cards.front());
      cards.pop();
    }
    while(cards.size() > 1) {
      cards.pop();
      cards.push(cards.front());
      cards.pop();
    }
    print(cards.front());
  }

  return 0;
}

Python

from collections import deque

cards = deque()

n = int(input())

for i in range(0, int(n/2)): 
  cards.append((i+1)*2)

if n == 1:
  print(1)
else:
  if n % 2 != 0:
    cards.append(cards.popleft())
  while len(cards) > 1:
    cards.popleft()
    cards.append(cards.popleft())
  print(cards.pop())

2231) 분해합

C++

#include <iostream>
#include <string>

using namespace std;

void input (int* i) {
  cin >> *i;
}

void print (int o) {
  cout << o << '\n';
}

bool isConstructor(int n, int m) {
  int sum = m;
  string str = to_string(m);

  for(int i=0; i<str.length(); i++) {
    sum += str[i] - '0';
  }
  
  return n == sum;
}

int main() {
  int n;
  int con = 0;

  input(&n);

  int range = n>54 ? n-54 : 0;

  for (int i=range; i<=n; i++) {
    if (isConstructor(n, i)) {
      con = i;
      break;
    }
  }

  print(con);

  return 0;
}

Python

def isConstructor (n, m):
  sum = m
  m_str = str(m)
  for i in range(0, len(m_str)):
    sum = sum + int(m_str[i])
  return n == sum

n = int(input())
con = 0
ran = n-54 if n>54 else 0

for i in range (n>54, n):
  if isConstructor(n, i):
    con = i
    break

print(con)

2292) 벌집

C++

#include <iostream>

using namespace std;

void input (int* i) {
  cin >> *i;
}

void print (int o) {
  cout << o << '\n';
}

int main() {
  int n;
  int rooms = 1;
  input(&n);

  while(n > 1) {
    n -= rooms * 6;
    rooms++;
  }

  print(rooms);

  return 0;
}

Python

n = int(input())
rooms = 1

while n > 1:
  n -= rooms * 6
  rooms = rooms + 1

print(rooms)

2609) 최대공약수와 최소공배수

C++

#include <iostream>

using namespace std;

void input (int* i) {
  cin >> *i;
}

void print (int o) {
  cout << o << '\n';
}

int euclidean(int n, int m) {
  int q = n;
  int r = m;

  while(r > 0) {
    int temp = q;
    q = r;
    r = temp % r;
  }

  return q;
}

int gcd(int n, int m) {
  return n < m ? euclidean(m, n) : euclidean(n, m);
}

int lcm(int n, int m) {
  return (n * m) / gcd(n, m);
} 

int main() {
  int n, m;

  input(&n);
  input(&m);

  print(gcd(n, m));
  print(lcm(n, m));

  return 0;
}

Python

def euclidean(n, m):
  q = n
  r = m

  while r > 0:
    temp = q
    q = r
    r = temp % r
  
  return q

def gcd(n, m):
  return euclidean(m, n) if n < m else euclidean(n, m)

def lcm(n, m):
  return (int)(n * m / gcd(n, m))

n, m = list(map(int, input().split()))

print(gcd(n, m))
print(lcm(n, m))

profile
Dart와 TypeScript를 다룹니다.

0개의 댓글