using System;
namespace for01
{
class Program
{
static void Main(string[] args)
{
// :: Input size and Parse
int size = Int32.Parse(Console.ReadLine());
// :: result Array
string[] result = new string[size];
// :: Loop with size
for(int i = 1; i <= size; i++)
{
// :: Save Result
result[i - 1] = i.ToString();
}
// :: Print with "Wn" for Spped
Console.WriteLine(string.Join("\n", result));
}
}
}
본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
C++을 사용하고 있고cin/cout을 사용하고자 한다면,cin.tie(NULL)과sync_with_stdio(false)를 둘 다 적용해 주고,endl대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.
Java를 사용하고 있다면,Scanner와System.out.println대신BufferedReader와BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.
Python을 사용하고 있다면,input 대신sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우.rstrip()을 추가로 해 주는 것이 좋다.
또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.
:: 성공
: 개선점 : 정리 필요
>> Console.WriteLine이 상당한 시간을 잡아 먹는다, 한 번만 쓸 것
>> string의 길이에 한계가 있음, 나중에 합칠 것
using System;
namespace for01
{
class Program
{
static void Main(string[] args)
{
// :: Input size and Parse
int size = Int32.Parse(Console.ReadLine());
// :: result Array
string[] result = new string[size];
// :: Loop with size
for(int i = 0; i < size; i++)
{
// :: Input numbers and Parse
string[] input = Console.ReadLine().Split(' ');
long a = long.Parse(input[0]);
long b = long.Parse(input[1]);
// :: Save Result
result[i] = (a + b).ToString();
}
// :: Print with "Wn" for Spped
Console.WriteLine(string.Join("\n", result));
}
}
}
using UnityEngine;
// PlayerController는 플레이어 캐릭터로서 Player 게임 오브젝트를 제어한다.
public class PlayerController : MonoBehaviour {
public AudioClip deathClip; // 사망시 재생할 오디오 클립
public float jumpForce = 700f; // 점프 힘
private int jumpCount = 0; // 누적 점프 횟수
private bool isGrounded = false; // 바닥에 닿았는지 나타냄
private bool isDead = false; // 사망 상태
private Rigidbody2D playerRigidbody; // 사용할 리지드바디 컴포넌트
private Animator animator; // 사용할 애니메이터 컴포넌트
private AudioSource playerAudio; // 사용할 오디오 소스 컴포넌트
private void Start() {
// 초기화
// 게임 오브젝트로부터 사용할 컴포넌트들을 가져와 변수에 할당
this.playerRigidbody = this.GetComponent<Rigidbody2D>();
this.animator = this.GetComponent<Animator>();
this.playerAudio = this.GetComponent<AudioSource>();
}
private Vector2 playerVelocity;
private void Update() {
// 사용자 입력을 감지하고 점프하는 처리
// 사망 시 처리를 더 이상 진행하지 않고 종료
if(isDead)
{
return;
}
this.playerVelocity = playerRigidbody.velocity;
if(playerRigidbody.velocity.y > 0)
{
// :: Find all BoxCollider2D
foreach (var itm in GameObject.FindObjectsOfType<BoxCollider2D>())
{
// :: Player : Ignore it
Physics2D.IgnoreCollision(playerRigidbody.gameObject.GetComponent<CircleCollider2D>(), itm, true);
}
} else if(playerRigidbody.velocity.y < 0)
{
foreach(var itm in GameObject.FindObjectsOfType<BoxCollider2D>())
{
Physics2D.IgnoreCollision(playerRigidbody.gameObject.GetComponent<CircleCollider2D>(), itm, false);
}
}
// :: When Mouse Right Button Clicking
if(Input.GetMouseButton(1))
{
// :: Igonore all Box Collider
foreach (var itm in GameObject.FindObjectsOfType<BoxCollider2D>())
{
// :: If it's not Start Block
if(!itm.gameObject.name.Contains("Start"))
Physics2D.IgnoreCollision(playerRigidbody.gameObject.GetComponent<CircleCollider2D>(), itm, true);
}
}
if(Input.GetMouseButtonDown(0) && jumpCount < 2)
{
// 점프 횟수 증가
jumpCount++;
// 점프 직전에 속도를 순간적으로 제로(0, 0)로 변경
playerRigidbody.velocity = Vector2.zero;
// 리지드 바디에 위쪽으로 힘 주기
playerRigidbody.AddForce(new Vector2(0, jumpForce));
// 오디오 소스 재생
playerAudio.Play();
} else if(Input.GetMouseButtonUp(0) && playerRigidbody.velocity.y > 0)
{
// 마우스 왼쪽 버튼에서 손을 떼는 순간 && 속도의 y 값이 양수라면(위로 상승 중)
// 현재 속도를 절반으로 변경
playerRigidbody.velocity = playerRigidbody.velocity * 0.5f;
}
// 애니메이터의 Grounded 파라미터를 isGrounded 값으로 갱신
animator.SetBool("Grounded", isGrounded);
}
private void Die() {
// 사망 처리
// 애니메이터의 Die 트리거 파라미터를 셋
animator.SetTrigger("Die");
// 오디오 소스에 할당된 오디오 클립을 deathClip으로 변경
playerAudio.clip = deathClip;
// 사망 효과음 재생
playerAudio.Play();
// 속도를 제로(0, 0)으로 변경
playerRigidbody.velocity = Vector2.zero;
// 사망 상태를 true로 변경
isDead = true;
}
private void OnTriggerEnter2D(Collider2D other)
{
Debug.LogFormat("OnTriggerEnter2D : {0}", other.gameObject.name);
// 트리거 콜라이더를 가진 장애물과의 충돌을 감지
if (other.tag == "Dead" && !isDead)
{
// 충돌한 상대방의 태그가 Dead이며 아직 사망하지 않았다면 Die() 실행
Die();
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
Debug.LogFormat("OnCollisionEnter2D : {0} / {1}", playerRigidbody.velocity.y, collision.contacts[0].normal.y);
// 바닥에 닿았음을 감지하는 처리
// 어떤 콜라이더와 닿았으며, 충돌 표면이 위쪽을 보고 있으면
if (collision.contacts[0].normal.y > 0.7f)
{
// isGrounded를 true로 변경하고, 누적 점프 횟수를 0으로 리셋
isGrounded = true;
jumpCount = 0;
}
}
private void OnCollisionExit2D(Collision2D collision) {
Debug.LogFormat("OnCollisionExit2D : {0}", collision.gameObject.name);
// 바닥에서 벗어났음을 감지하는 처리
// 어떤 콜라이더에서 떼어진 경우 isGrounded를 false로 변경
isGrounded = false;
}
}
N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.
첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 9보다 작거나 같다.
출력형식과 같게 N*1부터 N*9까지 출력한다.
:: 성공
: 개선점 : 없음
using System;
namespace for01
{
class Program
{
static void Main(string[] args)
{
// :: Input and Parse
int a = Int32.Parse(Console.ReadLine());
// :: Calculate and Print
for(int i = 1; i <= 9; i++)
{
Console.WriteLine("{0} * {1} = {2}", a, i, a * i);
}
}
}
}
// :: Found All Tiles
var tiles = GameObject.FindObjectsOfType<Transform>().Where(ele => ele.gameObject.name.Contains("Tile"));
foreach (var itm in tiles)
{
// :: Change name
string[] tileString = itm.gameObject.name.Replace('[', ' ').Replace(']', ' ').Replace(" ", " ").Split(' ');
// :: Init x, y, z
int x = Int32.Parse(tileString[1]);
int y = Int32.Parse(tileString[2]);
int z = Int32.Parse(tileString[3]);
// :: Make new Tile Class and Initialise
Battle_Class_Tile tile = new Battle_Class_Tile();
tile.Init(x, y, z);
// :: Add List
listTile.Add(tile);
}
Debug.LogFormat(":: [Battle:Init] All Tiles Found : {0}", listTile.Count);