앞의 문제들 중 비슷한 알고리즘이 있던 것 같지만, 같은 건 없다고 생각해서 올립니다. 문제를 푸는데 많은 approach가 있을 듯 싶습니다. 이 문제의 핵심은 비트 연산을 얼마나 잘 이해하고 있냐이기 때문에 비트 연산으로 풀어주세요.
input은 int n을 입력 받아 첫번째 row는 (n-1)의 O와 X, 두번째 row는 (n-2)의 O와 XX, 세번째 row는 (n-3)의 0와 XXX... n번째 row는 n의 X을 출력하시오.
입력 예시: 6
출력 예시:
OOOOOX
OOOOXX
OOOXXX
OOXXXX
OXXXXX
XXXXXX
284개의 풀이가 있습니다.
b = ['X' for i in range(int(input("자연수 입력 : ")))]
for i, x in enumerate(b):
b[:-i-1] = 'O' * (len(b)-i-1)
b[-i-1:] = 'X' * (i + 1)
print(''.join(b))
뭔가 허전한거같지만;
n=int(input("숫자를 입력해주세요 : "))
x=[bin(2**n-1>>i)[2:] for i in range(n)]
y=[f'{j:O>{n}}'.replace('1','X').replace('0','O') for j in x]
y.reverse()
print(*y,sep="\n") #Unpacking Operator * 를 사용하여 리스트를 구분자를 넣어 바로 출력하는 방법이다.]
[풀이] 비트 연산의 개념을 처음 접해서 코딩도장의 비트연산 설명을 참조하여 작성하였습니다. 정수를 입력받으면 해당 정수만큼 자리수를 반환해야하는데 2^n -1로 작성하면 n의 자리 전체가 1인 이진수를 반환 할 수 있습니다.(ex. 8=2^3 => 1000, 7=2^3-1 =>0111)
bin(n)은 십진수인 n을 0b+이진수 형태로 반환합니다. 우리가 필요한 부분은 0b 이후 이므로 문자열 슬라이싱으로 뒷부분만 반환하였습니다.
비트의 위치를 이동시키는 시프트 연산자 '>>'를 활용하면 비트를 이동시킬 수 있습니다. 이동시켰을 때 1이 들어갈 공간이 없다면 1은 사라집니다
# 한글 처리 in Atom 1.21.1 + Anaconda(Python 3.6.3)
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')
# input은 int n을 입력 받아 첫번째 row는 (n-1)의 O와 X,
# 두번째 row는 (n-2)의 O와 XX,
# 세번째 row는 (n-3)의 O와 XXX... n번째 row는 n의 X을 출력하시오.
n = int(input("n을 입력하세요 : "))
# n = 6
print('\n'.join(["O" * (n - i - 1) + "X" * (i + 1) for i in range(n)]))
public static void main(String[] args) {
int input = Integer.valueOf(new Scanner(System.in).nextLine());
for (int i = 0; i < input; i++)
System.out.println(
String.format("%0" + input + "d", Integer.valueOf(Integer.toBinaryString(
(int) (Math.pow(2, i + 1) - 1)))).replaceAll("0", "O").replaceAll("1", "X"));
}
C#으로 작성했습니다.
using System.Text;
public string PrintOXs(int n)
{
var curr = 0;
var output = new StringBuilder();
for (var i = n - 1; i >= 0; i++)
{
var temp = Math.Pow(2, i);
curr += (int)temp;
var binary = Convert.ToString(curr, 2);
output.Append(binary.Replace("1", "X").Replace("0", "O"));
output.Append("\n");
}
return output.ToString();
}
<?php
$value = 6;
for($i=1;$i<=$value;$i++) {
for ($j=1;$j<=$value;$j++) {
if($j <= $value-$i) echo 'O';
else echo 'X';
}
echo '<br>';
}
?>
def printString(n):
for line in range(n):
str = 'O' * (n - (line + 1)) + 'X' * (line + 1)
print(str)
printString(6)
def printoxs(n):
return [ ('%s%s') % (''.join('O' for _ in range(n - i)),
''.join('X' for _ in range(i))) for i in range(1, n + 1) ]
for element in printoxs(6): print (element)
Python 3.5에서 작성하였습니다.
2.7 쓰다가 넘어온지 얼마 안되어 아직은 많이 어색하네요.
public void PrintOXs(int n) {
for (int i = n - 1; i >= 0; i--) {
Console.WriteLine(string.Format("{0}{1}", "".PadRight(i, 'O'), "".PadRight(n - i, 'X')));
}
}
#Printing OXs
def OX(n):
try:
int(n)
except:
return
for i in range(n):
print("O"*(n-i-1)+"X"*(i+1))
OX(6)
수줍게 자바코드 올리고 갑니다......
import java.util.Scanner;
public class printfing_oxs {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int line, i, j, k;
while(true){
System.out.print("input number of line : ");
line = sc.nextInt();
if(line > 0)
break;
else
System.out.println("input number that bigger than '0'");
}
for(i = 0 ; i < line ; i++){
for(j = 0 ; j < line-(i+1) ; j++){
System.out.print("O");
}
for(k = 0; k < line - j ; k++){
System.out.print("X");
}
System.out.println();
}
}
}
int n = int.Parse(Console.ReadLine());
for (int i = 0; i < n;) {
Console.WriteLine($"{new string('O', n - i)}{new string('X', i)}");
}
#include <stdio.h>
void prOX(int n);
int main(void){
int n;
scanf("%d",&n);
prOX(n);
return 0;
}
void prOX(int n){
int i,a;
for(i=n;i>0;i--){
for(a=1;a<=n;a++){
if(a<i){
printf("O");
}
else
printf("X");
}
printf("\n");
}
}
C언어 입니다~
def Printing_OXs(int_n1, int_n2):
if not int_n1:
return
print('O' * (int_n1-1) + 'X' * (int_n2-int_n1+1))
Printing_OXs(int_n1-1, int_n2)
if __name__=='__main__':
n = int(input('Input positive integer: '))
Printing_OXs(n, n)
답은 이미 다 올려져있기에, 그냥 심심해서 재귀로 써봅니다
function printOX ($num) {
if ($num < 1) {
return;
}
for ($i = 0; $i < $num; $i++) {
$txt = "";
for($j = 0; $j < $num; $j++) {
if ($j >= ($num - ($i+1))){
$txt .= "X";
} else {
$txt .= "O";
}
}
echo $txt . "<br>";
}
}
printOX(6);
def print_ox(num):
list1 = []
for i in range(num):
list1.append("")
for i in range(num):
j = 1
while j <= num:
if j<num-i :
list1[i] += "O"
else:
list1[i] += "X"
j += 1
print (list1)
print_ox (6)
python 3.5
inum = input()
for i in range(1,int(inum)+1):
print('O'*(int(inum)-i),end='')
print('X'*int(i))
자바입니다
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
int n = Integer.parseInt(scan.nextLine());
for (int i = 0; i < n; i++) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < n - (i + 1); j++) {
sb.append("O");
}
for (int j = 0; j < i + 1; j++) {
sb.append("X");
}
System.out.println(sb.toString());
System.out.println();
}
void printOX(int n) {
int i, j ,k;
for(i=0; i<=n; i++) {
for(j=0; j<=n-i-1; j++) {
System.out.print("O");
}
for(k=0; k<=n-j; k++) {
System.out.print("X");
}
System.out.println();
}
}
java
Ruby
ox = ->n=read.to_i { (1..n).map {|i| 'O'*(n-i)+'X'*i } }
Test
expect(ox[6]).to eq ["OOOOOX", "OOOOXX", "OOOXXX", "OOXXXX", "OXXXXX", "XXXXXX"]
Output
#=> puts ox[6]
OOOOOX
OOOOXX
OOOXXX
OOXXXX
OXXXXX
XXXXXX
파이썬 3.4입니다
def ox(n):
for i in range(1, n + 1):
print('O' * (n - i) + 'X' * i)
while True:
ox(int(input('? ')))
public void printOXs(int n){
for(int i = 0 ; i < n ;i++){
for(int j = i ; j < n-1 ;j++) {
System.out.print("O");
}
for(int k = 0 ; k <= i ; k++) {
System.out.print("X");
}
System.out.println("");
}
}
st=input("input number:")
num = int(st)
for i in range(num):
oxst = 'O'*(num-(i+1))+'X'*(i+1)
print(oxst)
Python
try:
line = int(input("plz input: "))
except IOError as err:
print(str(err))
for j in range(1, line + 1):
print ("O" * (line - j) + ("X" * j))
파이썬 뉴비입니다 뉴비다운 방법으로 풀었습니다
import sys
n = int(input("Enter n : "))
for i in range(n):
for j in range(n-i-1): sys.stdout.write("O")
for j in range(i+1): sys.stdout.write("X")
print
string에 multiply 연산이 가능한걸 까먹었네요. 다른분 풀이보고 떠올랐습니다. 이 풀이가 제일 쉬운 풀이같습니다.
def printox(n):
for i in range(n):
print "O"*(n-i-1)+"X"*(i+1)
printox(10)
>>> a = lambda x: "\n".join(('X' * i).rjust(x, 'O') for i in range(1, x+1))
>>> print(a(10))
OOOOOOOOOX
OOOOOOOOXX
OOOOOOOXXX
OOOOOOXXXX
OOOOOXXXXX
OOOOXXXXXX
OOOXXXXXXX
OOXXXXXXXX
OXXXXXXXXX
XXXXXXXXXX
Python 입니다.
def print_ox(number):
for n in range(1, number+1):
print ("O"*(number-n) + "X"*n)
print_ox(6)
파이썬 2.7
x=input('Enter number:')
stra='O'*x
listb=list(stra)
for i in range(1,x+1):
listb[-i]='X'
for i in range(x):
print listb[i],
print ''
Python 3.5입니다.
def printing_ox():
number = int(input('Enter a number: '))
for num in range(1, number+1):
print('O' * (number - num) + 'X' * num)
printing_ox()
n=int(input("enter n :"))
nstack=n
while n>0:
n-=1
for i in range(n):
print("O",end="")
for i in range(nstack-n):
print("X",end="")
print("")
Python 3.5.2
package 코딩도장;
import java.util.Scanner;
public class Q11 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int input = in.nextInt();
int k=1;
while(input != 0)
{
for(int i=0; i<input-1;i++)
{
System.out.print("O");
}
for(int i=0;i<k;i++)
{
System.out.print("X");
}
System.out.println();
input--;
k++;
}
}
}
자바로 코딩
1. 입력받은 수만큼 0 으로 채움
2. String 배열로 split
3. 맨 뒤에 부터 루프 돌면서 x 로 채움
public static void main(String[] args){
String o = "0";
String x = "x";
int inputNumber = 0;
String text = "";
String[] textArray;
Scanner sc = new Scanner(System.in);
System.out.print("입력 :: ==> ");
inputNumber = sc.nextInt();
for(int i=0; i<inputNumber; i++){
text += o;
}
textArray = text.split("");
for(int i=textArray.length-1; i>=0; i--){
textArray[i] = x;
for(int j=0; j<textArray.length; j++){
System.out.print(textArray[j]);
}
System.out.println("");
}
sc.close();
}
def printer(first):
count = 1
while count <= first :
print "O"*(first-count) + "X"*(count)
count += 1
print printer(6)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("값 입력 : ");
int num = sc.nextInt();
for(int i= 1; i<=num; i++){
for(int j=0; j<num; j++){
if(num-i<=j) System.out.print("x");
else System.out.print("o");
}
System.out.println();
}
}
n = int(raw_input())
def Print_OX(n):
for i in range(1,n+1):
S=" "
for j in range(1,n+1):
if(j<=n-i):
S+="0"
else:
S+="X"
print S
Print_OX(n)
n=int(input())
for i in range(n):
for j in range(n-i-1):
print("O",end="")
for j in range(i):
print("X",end="")
print()
def checkOX(num):
for i in range(0, num):
str =""
for j in range(0, num):
if num - 1 - i > j:
str += 'O'
else:
str += 'X'
print(str)
checkOX(6)
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
void OX(int);
int main(void) {
int n = 0;
printf("input : ");
scanf("%d", &n);
OX(n);
system("pause");
return 0;
}
void OX(int n) {
char* str = new char[n + 1];
_strnset(str, 'X', n);
str[n] = '\0';
for (int i = n - 1; i >= 0; i--) {
_strnset(str, 'O', i);
puts(str);
_strnset(str, 'X', n);
}
delete[]str;
}
파이썬
a = int(input())
n = 0
strOX = ""
for i in range(1, a+1):
n = a
strOX = ""
while n > 0:
if n > i:
strOX = strOX + "O"
else:
strOX = strOX + "X"
n = n - 1
print(strOX)
안녕하세요. C++로 풀었습니다.
#include<iostream>
#include<string>
using namespace std;
void main()
{
cout<<"Hello Stranger??"<<endl;
int n =0 ;
cout<<"n 을 입력하시오"<<endl;
cin>>n;
for(int i=1; i<7; i++)
{
for(int j=0; j<n-i; j++)
cout<<"O";
for(int j=n-i; j<n; j++)
cout<<"X";
cout<<"\n";
}
}
public String makeChar(int num, int count){
String returnChar = "";
for(int i = 1; i <= num; i++) {
if(i < count) {
returnChar += "O";
}
else {
returnChar += "X";
}
}
return returnChar;
}
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
System.out.println("숫자를 입력하세요.");
int num = scanner.nextInt();
System.out.println("\n");
Ex13 ex13 = new Ex13();
for(int i = num; i > 0; i--){
String printChar = ex13.makeChar(num, i);
System.out.println(printChar);
}
}
def printingOXs(num):
for i in range(1, num + 1):
print('{0:O>{width}}'.format('X' * i, width=num))
printingOXs(6)
Python 3.5.2에서 작성하였습니다.
int main() { int i, j, n;
scanf("%d", &n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (n-1-i > j) printf("O");
else printf("X");
}
printf("\n");
}
}
line = int(input())
print('\n'.join(['O'*x+'X'*(line-x) for x in range(line-1,-1,-1)]))
#### 2016.12.14 D-435 ####
c언어로 했습니다
#include<stdio.h>
#include<Windows.h>
#define MAX 100
int main()
{
int a,i,j;
int count;
char b[MAX];
printf("몇줄로 하시겠습니까?\n");
scanf("%d",&a);
for(i=0;i<a;i++){
count=0;
for(j=0;j<a;j++){
if(j<a-i-1)
b[count]='o';
else
b[count]='x';
count++;
printf("%c",b[j]);
}
printf("\n");
}
system("pause");
return 0;
}
$input = 6;
for($i=$input;$i>=1;$i--){
echo sprintf("%s%s\n\n",str_repeat("O",$i-1),str_repeat("X",7-$i));
}
public class Printing {
public static void prn(int n) {
for (int i = 0; i <= n + 1; i++) {
if (i == 0 || i == n + 1)
continue;
for (int j = 0; j < n - i; j++) {
System.out.print("O");
}
for (int j = 0; j < i; j++) {
System.out.print("X");
}
System.out.println("");
}
}
public static void main(String[] args) {
prn(6);
}
}
def OX(n):
for i in range(n):
result=""
for j in range(n-i-1):
result+="O"
for j in range(i+1):
result+="X"
print(result)
def pr_ox(a, index):
str1 = ''
i = 0
if a == 1:
while i < index:
str1 += 'X'
i += 1
return str1
else:
return 'O' + pr_ox(a-1, index)
input = 6
index = input
for a in range(input):
print pr_ox(index, a+1)
index -= 1
/*
dev : peanutBro
date : 170218
content :
(앞의 문제들 중 비슷한 알고리즘이 있던 것 같지만, 같은 건 없다고 생각해서 올립니다.)
input은 int n을 입력 받아 첫번째 row는 (n-1)의 O와 X, 두번째 row는 (n-2)의 O와 XX, 세번째 row는 (n-3)의 0와 XXX... n번째 row는 n의 X을 출력하시오.
입력 예시: 6
출력 예시:
OOOOOX
OOOOXX
OOOXXX
OOXXXX
OXXXXX
XXXXXX
*/
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <iostream>
using namespace std;
int main(void)
{
int inputNumber;
cout << "입력 : ";
cin >> inputNumber;
for (int i = 1 ; i <= inputNumber; i++)
{
for (int j = 0; j < inputNumber-i; j++)
{
cout << "O";
}
for (int j = 0; j < i; j++)
{
cout << "X";
}
cout << endl;
}
}
import java.util.*;
public class printingOX {
public static void OXtest(int x){
String result = "";
for (int i =0;i<x;i++){
String blank ="";
for(int k=0;k<x-(i+1);k++){blank += "O";}
for(int l=0;l<i+1;l++){blank += "X";}
result += blank +"\n";
}
System.out.println(result);
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
printingOX.OXtest(x);
}
}
import java.util.Scanner;
import java.util.stream.IntStream;
import static java.lang.System.in;
public class PrintingOXs {
public static void main(String[] args) {
int n = new Scanner(in).nextInt();
IntStream.range(0, n).forEach(i -> IntStream.range(0, n).forEach(j -> {
System.out.print(j + i >= (n - 1) ? "X" : "O");
if (j == n - 1) System.out.println("");
})
);
}
}
public void go(int n) {
for(int i=0 ; i<n ; i++) {
for(int j=0 ; j<n ; j++) {
if(i+j>=n-1) {
System.out.print("x");
}else {
System.out.print("O");
}
}
System.out.println();
}
}
package codingdojang;
import java.util.Scanner;
public class PrintingOX {
public static void main(String args[]){
Scanner s=new Scanner(System.in);
System.out.println("숫자를 입력하세요");
int n=s.nextInt();
printing(n);
}
static void printing(int n){
for(int i=1;i<n;i++){
for(int a=0;a<n-i;a++)
System.out.print("O");
for(int s=0;s<i;s++)
System.out.print("X");
System.out.println();
}
}
}
Python 3.6.0 입니다. 푸는 과정에서 ''.join() 이라는 것을 새로 배웠네요.
num=int(input())
for p in range(num):
str_output=[]
for q in range(num-p-1):
str_output.append('0')
for q in range(p+1):
str_output.append('X')
print(''.join(e for e in str_output))
num = int(input('row 갯수? :'))
for i in range(num):
print("%s%s"%("O"*(num-(i+1)), "X"*(i+1)))
n = int(input("입력값을 정해주세요:"));
for i in range(0,n):
for j in range(0,n+1):
print("O"*n,end='');
print("X"*j);
n -= 1
파이썬 초보의 풀이입니다 ㅎㅎ..
package training;
/**
* input은 int n을 입력 받아 첫번째 row는 (n-1)의 O와 X, 두번째 row는 (n-2)의 O와 XX, 세번째 row는 (n-3)의 0와 XXX... n번째 row는 n의 X을 출력하시오.
* 입력 예시: 6
* 출력 예시:
* OOOOOX
* OOOOXX
* OOOXXX
* OOXXXX
* OXXXXX
* XXXXXX
*/
public class PrintOXs {
public static void main(String[] args) {
int iNum = 6;
StringBuffer sf = new StringBuffer();
for(int i=0;i<iNum;i++){
for(int j=0;j<iNum;j++){
if(j < iNum-i-1){
if(i==0){
sf.append('O');
} else {
sf.setCharAt(j,'O');
}
} else {
if(i==0){
sf.append('X');
} else {
sf.setCharAt(j,'X');
}
}
}
System.out.println(sf);
}
}
}
값을 입력 받는 구문이 문제에 있으므로 스캐너 라이브러리를 사용하였습니다.
import java.util.*;
public class ExampleTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("N 값 입력 > ");
int x; int y; int input = scanner.nextInt();
for(int n = 0; n < input; n++) {
for(x = 5; x-n > 0; x--) {
System.out.print("O");
}
for(y = 1; y <= n+1; y++) {
System.out.print("X");
}
System.out.println();
}
}
}
n = int(input("입력하세요 : "))
for i in range(1,n+1) :
for j in range(1,n+1):
if(j<=n-i):
print("o",end="")
else :
print("X",end="")
print("\n")
def printing(n):
a = 1
for i in range(n):
b = n-a
print("O"*b+"X"*a)
a += 1
printing(6)
OOOOOX OOOOXX OOOXXX OOXXXX OXXXXX XXXXXX
n = int(input("Input Number:"))
m = ""
k = ""
for i in range(1,n+1):
m = "O"*(n-i)
k = "X"*i
print(m+k)
def getPrinting(n):
for n1 in range(1, n+1):
print(''.join(['O' for x in range(0,n-n1)] + ['X' for x in range(0,n1)]))
getPrinting(6)
public static void main(String[] args) {
int n = 10;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(j < (n - 1) - i) {
System.out.print("O");
} else {
System.out.print("X");
}
}
System.out.println();
}
}
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
j > n - i - 2 ? printf("O") : printf("X");
}
cout << endl;
}
return 0;
}
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
j > n - i - 2 ? printf("O") : printf("X");
}
cout << endl;
}
return 0;
}
# python
inp = int(input())
lst = ["O" * (inp - x) + "X" * x for x in range(1, inp + 1)]
print("\n".join(lst))
파이썬 2.7 입니다
def ox_print (int_input):
for i in range(int_input):
i += 1
print ("O" * (int_input - i) + "X" * i)
ox_print(6)
n=10
for i in range(n):
for k in range(n-i):
print("o", end='')
for k in range(i+1):
print("x", end="")
print("")
python 3.52 입니다
1이 결과가 나오는 최소 정수라고 생각해서.. 0보다 큰 수를 넣어달라고 적었습니다.
n=int(input('0보다 큰 정수 입력: '))
i = 1
while n >= i:
result = 'O'*(n-i)+'X'*i
i+= 1
print(result)
public void Program(int n) {
for(int i=0 ; i<n ; i++) {
for(int j=0 ; j<n ; j++) {
if(i+j>=n-1) {
System.out.print("x");
}else {
System.out.print("O");
}
}
System.out.println();
}
}
python입니다 어렵지 않습니다
input_1 = 6
size = input_1 + 1
for x in range(1, size):
k=0
k = "".join("O"*(input_1-x)+"X"*x)
print(k)
c
#include <stdio.h>
int main(){
int n;
int i;
int j;
scanf("%d",&n);
for(i=1;i<(n+1);i++){
for(j=0;j<(n-i);j++){
printf("O");
}
for(; j<=n-1;j++){
printf("X");
}
printf("\n");
}
}
def ox_make(number):
tmp=''
for i in range(1, number+1):
tmp+='O'*(number-i)+'X'*i+'\n'
return(tmp)
num=float(1)
while not num.is_integer() or num<2:
num=float(input('n(2 이상의 자연수): '))
else:
num=int(num)
print(ox_make(num))
#include <stdio.h>
void main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - i - 1; j++) {
printf("O");
}
for (int k = 0; k < i + 1; k++) {
printf("X");
}
printf("\n");
}
}
파이썬 3.6
def printox(n):
string = ''
x = 1
while x <= n:
for i in range(n):
if i < n - x:
string += 'O'
else:
string += 'X'
x += 1
print('',string,"\n")
string = ''
n = int(input(" ▶ 열의 개수(row)를 입력하세요: "))
print("\n")
printox(n)
▶ 열의 개수(row)를 입력하세요: 6
OOOOOX
OOOOXX
OOOXXX
OOXXXX
OXXXXX
XXXXXX
int inputed=6;
for(int i=0;i<inputed;i++)
{
int g=5-i;
int t=i+1;
for(int j=0; j<g; j++)
{
System.out.print("O");
}
for(int k=0; k<t; k++)
{
System.out.print("X");
}
System.out.println("");
}
자바
package cddj;
import java.util.Scanner;
import java.util.Arrays;
public class cddj13 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String[] arr = new String[input.nextInt()]; // MAKE CERTAIN LENGTH ARRAY
Arrays.fill(arr, "O"); // FILL ARRAY 'O'
for (int i = 0; i < arr.length; i++) {
arr[i] = "X"; // CHANGE "O" TO "X"
System.out.println(new StringBuffer("".join("", arr)).reverse().toString());
}
}
}
n = input('수를 입력하세요: ')
s2 = ''.join([100*'O' + 100*'X'])
i = 1
while i <= int(n):
print(s2[100 + i -int(n) : 100 + i])
i += 1
어떤 생각으로 풀었는지 이해하시는 분 있으실려나요..ㅜㅜ
import java.util.Scanner; public class level_1_printing_OXs { public static void main(String[] args) {
System.out.println("정수를 입력하세요.");
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
sc.close();
for(int i = 0; i < input; i++)
{
for(int j = i; j < input - 1; j++)
{
System.out.print("O");
}
for(int h = 0; h <= i; h++)
{
System.out.print("X");
}
System.out.println();
}
}
}
def printing_oxs():
a='o'
b='x'
n=input('type number:')
for i in range(n):
print (a*(n-(i+1)))+(b*(i+1))
def main():
pass
n = int(input("입력 : "))
for i in range(1, n+1):
print("O" * (n-i) + ("X" * i))
main()
def OX(n):
result = []
for Xs in range(1, n + 1):
result.append('O' * (n - Xs) + 'X' * Xs)
for args in result:
print(args)
Python 3입니다 비트연산이 뭔지 몰라서 그냥 풀었다는...
Swift입니다.
var input = 6
for i in 1...input {
print(String(repeating: "O", count:(input - i)) + String(repeating: "X", count: i))
}
문제에서 요구한 비트연산 풀이가 하나도 없어서 파이썬 초보가 한 줄 적고갑니다.
x = int(input('자연수를 입력하세요 : '))
for i in range(1, x+1):
print(bin((2**x - 1) & ~(2**i - 1))[2:].replace('0', 'X').replace('1', 'O') if i < x else 'X' * x)
n = input('input number ==>')
a = 0
for idx in range(0, int(n)):
a = a + 2 ** idx
f = bin(a)[2:].zfill(int(n))
print(f.replace('1','X').replace('0','O'))
#include<iostream>
using namespace std;
int main()
{
int n;
cout << "정수를 입력하시오>>";
cin >> n;
for (int i = 0; i < n; i++)
{
for (int j = n; j-1 > i; j--)
{
cout << "O";
}
for (int o = 0; o < i; o++)
{
cout << "X";
}
cout << endl;
}
}
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i=0; i<n; i++) {
for (int j=n-1; j>i; j--) {
System.out.print("O");
}
for (int j=0; j<=i; j++) {
System.out.print("X");
}
System.out.println();
}
} // 비트 연산 할 줄 몰라서..ㅠㅠ
function xoFunc(n){
let x = "X";
let o = "O";
for(let i = 1; i<n+1; i++){
let repeat = o.repeat(n-i)+x.repeat(i)
console.log(repeat);
}
}
xoFunc(6)
repeat()를 사용하여 해결했습니다.
import java.util.Scanner;
public class printfing_oxs {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int line, i, j, k;
while(true){
System.out.print("input number of line : ");
line = sc.nextInt();
if(line > 0)
break;
else
System.out.println("input number that bigger than '0'");
}
for(i = 0 ; i < line ; i++){
for(j = 0 ; j < line-(i+1) ; j++){
System.out.print("O");
}
for(k = 0; k < line - j ; k++){
System.out.print("X");
}
System.out.println();
}
}
}
파이썬 3.6
def input(n):
for i in range(1, n+1):
print("O"*(n-i) + "X"*i)
결과 input(10)
OOOOOOOOOX OOOOOOOOXX OOOOOOOXXX OOOOOOXXXX OOOOOXXXXX OOOOXXXXXX OOOXXXXXXX OOXXXXXXXX OXXXXXXXXX XXXXXXXXXX
그냥 풀면 쉬운 내용이 비트연산으로 풀면 더 어렵네요. ㅠㅠ 비트연산을 활용해 이진수가 왼쪽 자릿수부터 1씩 증가하도록 만들었습니다.
length = int(input("입력: ")) #6
sum1 = 0
for i in range(length): # 0~5
sum1 = sum1 | 2**i # 비트연산 or
c = bin(sum1).count("1")
print(((length - c) * "O") + (c * "X"))
# Output:
#입력: 6
#OOOOOX
#OOOOXX
#OOOXXX
#OOXXXX
#OXXXXX
#XXXXXX
Python
n = 6 #n = int(input())
ans = 0
for i in range(n):
ans = ans | 2**i
a = str(bin(ans)).count("1")
print("O"*(n-a)+"X"*a)
void printOX(int n) { int i, j ,k; for(i=0; i<=n; i++) { for(j=0; j<=n-i-1; j++) { System.out.print("O"); } for(k=0; k<=n-j; k++) { System.out.print("X"); } System.out.println(); } }
바이너리로 풀라그래서 쉬프팅 써봤습니다.
def printingOX(num): sum = 0 for i in range(1,num): sum = sum + 2**i binary_result = bin(sum)
temp = sum
print(binary_result[-num:].replace('1','O').replace('0','X'))
for i in range(1,num):
operation = temp << 1
bin_afterOperation = bin(operation)
print(bin_afterOperation[-num:].replace('1','O').replace('0','X'))
temp = operation
x = "x"
o = "o"
def input_num(n) :
for i in range(1, n+1) :
print (o * (n-i) + (x * i))
input_num(6)
'''
더 쉬운 방법도 있지만, 문제에 bit 연산을 이용하라는 조건이 있어서 그렇게 했습니다.
'''
import sys
n = int(sys.argv[1])
num = 2**n - 1
for x in range(1,n+1):
print( "{0:b}".format(num << x)[-n:].replace('1','O').replace('0','X') )
row = int(input('숫자를 입력하세요'))
for i in range(row+1):
print((row-i)*'O'+'X'*(i))
만들다 보니 이렇게 만들어 졌네요 ㅎ
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*
앞의 문제들 중 비슷한 알고리즘이 있던 것 같지만, 같은 건 없다고 생각해서 올립니다. 문제를 푸는데 많은 approach가 있을 듯 싶습니다. 이 문제의 핵심은 비트 연산을 얼마나 잘 이해하고 있냐이기 때문에 비트 연산으로 풀어주세요.
input은 int n을 입력 받아 첫번째 row는 (n-1)의 O와 X, 두번째 row는 (n-2)의 O와 XX, 세번째 row는 (n-3)의 0와 XXX... n번째 row는 n의 X을 출력하시오.
*/
int main()
{
int binary[6]={0,};
int i,num=1;
int result=0;
int result2=0;
int count=6;
result = pow(2,6)-1;
while(count>0){
result = result^num;
result2 = result;
for(i=5;i>=0;i--){
binary[i]=result2%2;
result2/=2;
}
for(i=0;i<6;i++){
if(binary[i]==1)
printf("O");
else
printf("X");
}
printf("\n");
num=num<<1;
count--;
}
return 0;
}
xor 로풀었씁니다
namespace codingdojang__
{
class Program
{
static void Main(string[] args)
{
int total = int.Parse(Console.ReadLine());
int o = total - 1;
int x = 1;
for (int i = 1; i <= total; i++)
{
for (int oo = 1; oo <= o; oo++)
{
Console.Write("O");
}
for (int xx = 1; xx <= x; xx++)
{
Console.Write("X");
}
o -= 1;
x++;
Console.WriteLine();
}
}
}
}
val = 6
for i in range(val):
for j in range(0, val - (i + 1)):
print('0', end = '')
for j in range(val - (i + 1), val):
print('X', end = '')
print()
n = int(input())
stack=0
for i in range(n) :
stack+=1<<i
cunt = bin(stack).count("1")
print("O"*(n-cunt)+"X"*cunt)
def print_string(n) :
for m in range(n) :
nums = 'O' * (n - m) + 'X' * m
print(nums)
print_string(20)
파이썬입니다
a= ["O" for i in range(int(input()))]
for i in range(len(a)):
j = len(a)-i-1
a[j]="x"
print("".join(a))
count = int(input('갯수 입력: '))
for i in range(count):
for j in range(1, count-i):
print('O', end='')
for k in range(i+1):
print('X', end='')
print()
파이썬
while True:
n=int(input("Input a positive integer: "))
for i in range(1,n+1):
print("O"*(n-i)+"X"*i)
def print_oxs(n):
for i in range(1, n + 1):
print('O' * (n - i) + 'X' * i)
n = int(input("Enter a number: "))
print_oxs(n)
def covert_0X(n):
for i in range(1, n + 1):
print('0'*(n-i) + ('X'*i))
n = int(input('n값을 입력하시오: '))
covert_0X(n)
package test0425;
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 0;
System.out.println("숫자를 입력하시오:");
int n = sc.nextInt();
for(int j = 0; j < n; j ++) {
for(int i = n-1-j; i >= 1; i--) {
System.out.print("O");
count ++;
}
while(true) {
if(count != n ) {
System.out.print("X");
count ++;
}else {
count = 0;
System.out.println();
break;
}
}
}
}
}
i1 = int(input()) -> 인풋을 받는다
for i in range(i1 + 1): -> 인풋의 값만큼 줄을 출력한다.
print('O' * i1 - i, end = '') -> O를 출력한다.
print('X' * i1, end = '') -> X를 출력한다.
이게 맞는진 모르겠지만.... 잘 봐주세요!
public static void main(String args[]) {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int i,y;
for(i=1;i<=n;i++){
for(int x=(n-1);i<=x;x--) {
System.out.printf("O");
}
for(y=1;i>=y;y++) {
System.out.printf("X");
}
System.out.println();
}
}
}
a=int(input(''))
for i in range(1,a+1):
print('O'(a-i)+('X'i)){.python}
a=int(input(''))
for i in range(1,a+1):
print('O'*(a-i)+('X'*i))
# algorithm
def o_x(a):
for i in range(a):
print('O'*(a-(i+1))+'X'*(i+1))
# input number that you want
a = int(input()); o_x(a)
SIZE=int(input("n을 입력하세요: ")) n=SIZE while n>=0: string="" for a in range(0,n): string+="O" for a in range(SIZE-n): string+="X" print(string) n-=1
PHP
$fn = function(int $n) : string {
$arr = [];
foreach (range(1, $n) as $i) {
$arr[] = str_repeat('O', $n - $i).str_repeat('X', $i);
}
return implode(PHP_EOL, $arr);
};
print_r($fn(5));
/*
OOOOX
OOOXX
OOXXX
OXXXX
XXXXX
*/
print_r($fn(6));
/*
OOOOOX
OOOOXX
OOOXXX
OOXXXX
OXXXXX
XXXXXX
*/
print_r($fn(7));
/*
OOOOOOX
OOOOOXX
OOOOXXX
OOOXXXX
OOXXXXX
OXXXXXX
XXXXXXX
*/
# Printing OXs
def OXs(n):
x = 1
while n > 0:
print("O"*(n-1)+"X"*x)
n -= 1
x += 1
n = input("Input number = ")
OXs(int(n))
n = int(input("자릿 수 입력 : "))
result = 0
for i in range(n):
result = result | 2**i
char = str(bin(result)).count("1")
print(((n-char) * "O")+ (char * "X"))
package practiceLv1;
import java.util.*;
public class PrintingOXs {
//비트 연산으로 풀라는 말을 잘 몰라서 이렇게 품
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String a="";
int n = scan.nextInt();
ArrayList<String> list = new ArrayList<String>();
for(int i = n-1; i>=0; i--) {
a="";
for(int j = 0; j<n; j++) {
if(j<i) {
a += "0";
}
else {
a += "1";
}
}
System.out.println(a.replaceAll("0", "O").replace("1","X"));
}
}
}
파이썬 3.6 입니다
def print_o_x(n):
for i in range(1, n + 1):
print("O" * (n - i), end="")
print("X" * i)
print_o_x(6)
inp = int(input("INPUT : "))
print("\n".join(["O"*(inp-i)+"X"*i for i in range(1, inp+1)]))
결과
INPUT : 6
OOOOOX
OOOOXX
OOOXXX
OOXXXX
OXXXXX
XXXXXX
심심해서 재귀함수를 이용한 버전으로도 한번 만들어봤습니다.
def OXs(N, O) :
print("O"*(O-N)+"X"*N)
if N != O :
return OXs(N+1, O)
OXs(1, int(input("INPUT : ")))
결과
INPUT : 10
OOOOOOOOOX
OOOOOOOOXX
OOOOOOOXXX
OOOOOOXXXX
OOOOOXXXXX
OOOOXXXXXX
OOOXXXXXXX
OOXXXXXXXX
OXXXXXXXXX
XXXXXXXXXX
circle = 'O'
ax = 'X'
for i in range(1, 6):
print()
for k in range(6, i, -1):
print(circle, end='')
for j in range(0, i):
print(ax, end='')
n = int(input('정수 입력'))
x = 2 ** n - 1
for i in range(1, n + 1):
str = bin(x << i)[-n:]
str = str.replace('1', 'O')
str = str.replace('0', 'X')
print(str)
비트연산으로 하라고 하셔서...
m = int(input("숫자를 입력하세요!: "))
for i in list((range(m))):
print("O"*(m-(1+i)), end="")
print("X"*(i+1))
import java.util.Scanner;
public class PrintingOX {
public static void main(String[] args) {
Scanner Sc = new Scanner(System.in);
System.out.print("숫자를 입력하시오: ");
int input = Sc.nextInt();
for(int i =1 ; i <=input; i++) {
for(int j=0; j<input-i; j++) {
System.out.print("O");
}
for(int k=0; k<i ; k++) {
System.out.print("X");
}
System.out.println();
}
Sc.close();
}
}
def ox_output(loop_number):
for n in range(1,loop_number+1):
loop_number = loop_number -1
print('O'*(loop_number) + 'X'*n)
iv = int(input("숫자를 입력하세요:"))
end = iv + 1
for i in range(1, end):
for j in range(1, end):
if j <= (iv-i) :
print("O", end="")
else:
print("X", end="")
print()
N = int(input())
m = ""
n = N
for i in range(N):
m += "O"
while(N-1 >= 0):
N-=1
m = m[:N]
for i in range(n-N):
m += "X"
print(m)
def out_ox(n): return [print(("O"*(n-i)) + ("X"*i)) for i in range(1, n+1)]
out_ox(int(input("값을 입력하세요")))
n = int(input())
k=1
for i in range(0,n) :
for j in range(0,n-1):
print('O',end='')
for r in range(0,k):
print('X',end='')
k=k+1
n=n-1
print('\n')
import java.util.Scanner;
public class Q096 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("input : ");
int n = scan.nextInt();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (j < n - (i + 1)) {
System.out.print("O");
} else if (j > n - (i+2)&&j!=n-1){
{
System.out.print("X");
}
} else {
System.out.println("X");
}
}
}
scan.close();
}
}
java
first = input("값을 입력하세요: ")
for i in range(int(first)):
print("o"*(int(first)-(i+1))+"x"*(i+1))
``````{.python}
first = input("값을 입력하세요: ")
for i in range(int(first)):
print("o"*(int(first)-(i+1))+"x"*(i+1))
#include <stdio.h>
int main(){
int i,j,in;
scanf("%d",&in);
for (i = 0; i < in; i++) {
for (j = 0; j < in; j++) {
if (in-1-i > j)
printf("O");
else
printf("X");
}
printf("\n");
}
return 0;
}
Scanner scan = new Scanner(System.in);
System.out.print("숫자 : ");
int n = scan.nextInt();
for(int i = 0; i < n; i++) {
for(int j = 0; j < n - i - 1; j++) {
System.out.print('o');
}
for(int t = 0; t < i + 1 ; t++) {
System.out.print('x');
}
System.out.println();
}
class NumOrganizer:
def __init__(self):
pass
def doOrganize(self,n):
for m in range(0,n):
line = ""
on = n-m-1
ox = m+1
for i in range(0,on):
line += "O"
for i in range(0,ox):
line += "X"
print(line)
n = 6
a = NumOrganizer()
a.doOrganize(n)
a = int(input("type an integer: "))
OXs = 'O'*(a-1)+'X'
for i in range(a):
print('O'*(a-1-i)+'X'*(i+1))
no = int(input("NUMBER OF N:"))
for i in range(no):
nx = i+1
print("O"*(no-nx),end="")
print("X"*nx)
number=int(input("how many? "))
for i in range (number):
for j in range(number-i-1):
print("O",end="")
for v in range(i+1):
print("X",end="")
print("")
import os
os.system('cls')
if __name__ == "__main__":
n = int(input("Input Numbers : "))
for i in range(1,n+1):
print('O'*(n-i), 'X'*i, sep='')
n = int(input())
num = ('s'* n).replace('s','1')
#print(num)
#print(num.replace('1','O'))
for i in range(1, len(num) + 1):
print("O" * (n-i) + "X" * i)
[파이썬]
n = int(input("숫자 n을 입력하시오\n:"))
for i in range(n):
print((n-i-1)*"O", end="")
print((i+1) * "X", end="")
print()
a = int(input("1~9 사이의 정수를 입력해주세요. : "))
for i in range(1, a + 1):
print(('O' * (a - i)) + ('X' * i))
package Printing;
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int input = s.nextInt();
for(int i=0; i<input; i++) {
for(int t=input-1; t>i; t--) {
System.out.print("O");
}
for(int j=0; j<i; j++) {
System.out.print("X");
}
System.out.println();
}
}
}
Python입니다. 문제에서 요구한 대로 비트 연산을 사용했습니다.
>>> def f(n):
... b = 1
... for i in range(n):
... print(('{0:06b}'.format(b)).translate(str.maketrans('01', 'OX')))
... b = (b << 1) + 1
...
>>> f(6)
OOOOOX
OOOOXX
OOOXXX
OOXXXX
OXXXXX
XXXXXX
아래는 이해하기 쉽게 format과 translate를 제거한 것입니다.
>>> def g(n):
... b = 1
... for i in range(n):
... print('{0:b}'.format(b))
... b = (b << 1) + 1
...
>>> g(6)
1
11
111
1111
11111
111111
여기에 포매팅을 적용하면 다음과 같이 할 수 있습니다.
>>> def h(n):
... b = 1
... for i in range(n):
... print('{0:06b}'.format(b))
... b = (b << 1) + 1
...
>>> h(6)
000001
000011
000111
001111
011111
111111
끝으로 translate를 이용해 0-->O, 1-->X로 바꾸면 답이 됩니다.
inp = int(input())
sum1 = 0
for i in range(0,inp):
sum1 = sum1 | int(2**i)
no_of_1=str(bin(sum1)).count("1")
print((inp-no_of_1)*"0"+(no_of_1)*"1")
python 3.9.5입니다. 두 줄로 작성해 보았습니다.
row = int(input('how many rows to print?: '))
for i in range(1, row + 1): print(('O' * (row - i)) + ('X' * i))
실행 결과입니다.
how many rows to print?: 6
OOOOOX
OOOOXX
OOOXXX
OOXXXX
OXXXXX
XXXXXX
# 파이썬입니다.
a=int(input('type length of row'))
for i in range(1,a+1):
print("{0}{1}".format('O'*(a-i),'X'*(i)))
def printing_ox():
n = int(input("정수를 입력해주세요 : "))
i = 1
while i < n + 1:
temp_1 = "O" * (n - i)
temp_2 = "X" * i
result = temp_1 + temp_2
i += 1
print(result)
printing_ox()
#codingdojing_prining OXs
n = int(input("Enter the integer: "))
for i in range(1, n+1):
print('O'*(n-i) + 'X'*i)
##댓글 참고해서 비트연산자, 일부 수정
## 111110로 시작해서 << 로 밀고 replace/translate
bitN = 2**n - 2 #(Ob~11110)
OX = str.maketrans('10', 'OX')
for i in range(n):
print(bin(bitN << i)[-n:].translate(OX))
#'0b111110'
n = input()
result = ""
acc = 1
for i in range(int(n)):
for j in range(int(n)):
if j < 6 - acc:
result += 'O'
else:
result += 'X'
result += '\n'
acc += 1
print(result)
n = int(input("숫자를 입력하세요: ")) i = 0 while i <= n-1: i += 1 x=str(bin(2**i-1)) x=x.replace("0b","") x=x.replace("1","X") y = 'O' * (n-len(x)) + x print(y)```{.python}
```
num = int(input("숫자를 입력하세요 : "))
for i in range(num):
if num == (i+1):
print("X" * num)
else:
a = format(((2**num) - 2**(i+1)), 'b')
print(a.replace("0","X").replace("1", "0"))
# 비트 연산자 없이 할 때
n = int(input('정수 n을 입력해주세요 : '))
count_O = n
count_X = 1
while 0 < count_O:
print('O'*(count_O - 1),end='' 'X'*(count_X))
print()
count_O -= 1
count_X += 1
user_input=int(input('정수 입력 : '))
for i in range(user_input):
print('O'*(user_input-(i+1))+'X'*(i+1))
n = int(input('정수를 입력하세요: '))
for i in range(n, 0, -1):
for j in range(i-1, 0, -1):
print("O", end='')
for k in range(n-i+1):
print("X", end='')
print('')
public static void main(String[] args) {
for(int i= 0; i < 6; i ++) {
for(int j = 0; j <6-i-1; j++) {
System.out.print("O");
}
for(int j = 0; j < i+1; j++) {
System.out.print("X");
}
System.out.println();
}
}
n =6
for i in range(1,n+1) :
for k in range(i,n) :
print("O",end="")
for k in range(0,i) :
print("X",end="")
print("")
row = "O" * int(input("n? "))
for i in range(len(row)):
row_ = row.replace('O',"X",i+1)
print("".join(sorted(row_)))
using System;
using System.Collections.Generic;
namespace FirstProgram
{
class Program
{
static void Main(string[] args)
{
Console.Write("정수를 입력하세요 : ");
String N = Console.ReadLine();
int n = Convert.ToInt32(N);
int o = n-1;
int x = 1;
for(int i=0; i<n; i++)
{
for(int j=0; j<o; j++)
{
Console.Write("O");
}
for(int k=0; k<x; k++)
{
Console.Write("X");
}
o--;
x++;
Console.WriteLine();
}
}
}
}
C#
<?php
$x = 6;
for($i = 0, $bin = 1; $i < $x; $i++) {
$bin = $bin << 1;
echo str_replace([0, 1], ['O', 'X'], sprintf("%0{$x}b", $bin - 1)) . PHP_EOL;
}
{.python}
n = int(input())
for i in range (0, n): print(str(("O") * (n - i)) + str(("X") * (i + 1)))
num_OX = int(input("Number of integer: "))
for n in (range(num_OX)):
if n+1 > 0:
O = "O"*(n)
X = "X"*(num_OX-n)
print(O+X)
코딩 초보입니다.
많은 조언 부탁드립니다.
python
input = int(input("Enter Number : "))
for i in range(1, input) :
print('O'*(input - i) + 'X'*i)
python
n = int(input("정수를 입력하시오: "))
# n개의 1로 나열된 2진수 계산
# 예를 들어 n=6일 때, x=63, bin(x)=0b111111이다.
x = 0
for i in range(n):
x += 2**i
for i in range(n):
result = bin(x<<(i+1))[-n:]
result_O = result.replace('1','O')
result_OX = result_O.replace('0','X')
print(result_OX)
5자리일 때 과정 설명. 각 과정은 8진수식 표기. i=0 n=5 number=8(제곱5)-1(77777) k=1(00001) n^k=(77776) n^k 연산 과정 설명. ^는 xor연산임. (같으면 0, 다르면 1) 2진수식 계산 : 7(111) ^ 0(000) = 7(111) 2진수식 계산 : 7(111) ^ 1(001) = 6(110) k<<1=k*2 k<<2=k*4 k<<3=k*8 1<<3 => (0001) -> (1000) \[좌로 3칸\](곱하기 8) 아래에서부터 number와 k의 10진수식 표기 X i=1 n=5 number=(77776) k=(00010) n^k=(77766) i=2 n=5 number=(77776) k=(00100) n^k=(77666) i=3 n=5 number=(77776) k=(01000) n^k=(76666) i=4 n=5 number=(77776) k=(10000) n^k=(66666) n^k값의 7을 알파벳'O'로, 6을 알파벳'X'로 바꾸어줌.
def printingOXs():
n=int(input('정수 n을 입력하세요. >> '))
number=pow(8,n)-1
k=1
for i in range(n):
number^=k
OXs=format(number,'o') #'o'는 8진수.(octal) ['b'는 2진수(binary)]
OXs=OXs.replace('6','X') #'6'을 'X'로
OXs=OXs.replace('7','O') #'7'을 'O'로
print(OXs)
k<<=3
printingOXs()
2진수식 해결방법을 두고 8진수식 표기를 사용한 이유는
2진수식 표기로 마지막 줄이 "00000"이 되어야 하는데, 수 특성상 '0' 한자리로 끝나버리기 때문..
Python. 더 간단하게 만들 수 있을 것 같은데, 아직은 어렵네요.
#printingOXs.py
def printOX():
n=int(input("임의의 수를 입력해주세요. : ")) #임의의 수 b을 입력
o=n-1 #O의 최초 개수 설정
for i in range(o):
print(("O"*o)+("X"*(n-o))) #n-1만큼의 O와 n-o만큼의 X를 차례로 출력
o-=1 #O와 X의 표기 수를 결정하는 객체 o의 수를 순차적으로 1씩 차감
printOX()
num=input('정수를 입력하시오.')
int_num = int(num)
rep_num = 0
while int_num-rep_num>0:
rep_num = rep_num +1
print('O'*(int_num-rep_num) + 'X'*(rep_num))
n = int(input("자연수를 입력하세요"))
x = range(0,n)
result = 0
for i in x:
a = 2**i
result = result + a
print(str(bin(result|2**n)).replace("0b1","").replace("1", "X"))
input_num = int(input("숫자를 입력하세요 : "))
for i in range(1, input_num+1):
print("O" * (input_num - i)+"X"*i)
number = input("숫자입력 : ")
n = int(number)
O_numb = n
X_numb = 0
for i in range(n):
O_numb -= 1
X_numb += 1
if O_numb >= 0 and X_numb <= n:
print('O'*O_numb + 'X'*X_numb)
else:
break
n, getBin = int(input('입력:')), lambda x: f'{int('1'*n,2) & int('1'*n,2) << x :0{n}b}'
_ = [print(getBin(i+1).replace('1','O').replace('0','X')) for i in range(n)]
> 입력: 6
> OOOOOX
> OOOOXX
> OOOXXX
> OOXXXX
> OXXXXX
> XXXXXX